Javascript-错误:Route.post()需要一个回调函数,但得到了一个[object Promise]



我的一条快递路线出现以下错误:

Error: Route.post() requires a callback function but got a [object Promise]

这是因为controllerFunction:中的最后一行

// IN CONTROLLER.JS
exports.controllerFunction = async (req, res) => {
//Get some values
let foos = await User.somefunction();

for(foo in foos){
//Call some async void functions
}
res.status(200).send('DONE')
}
...
// IN ROUTER.JS
router.post('/', validation, validate, checkLoggedIn, checkUserPermission(1), async(req, res, next) => {
try{
await controller.controllerFunction(req, res)
} catch (error) {
next(error);
}
});

我想我需要返回一个回调函数,但我不确定如何返回。我的控制器的其余功能看起来是这样的,它们之所以工作是因为.then():

// IN CONTROLLER.JS
exports.getCameras = async (req, res) => {
await Model.getCameras(req.machine)
.then(cameras => res.send(cameras));
}

但是在我的controllerFunction中,我不能调用.then(),因为我需要在for循环中预先做一些逻辑,所以我需要以其他方式生成回调函数。

如何使controllerFunction成为回调函数?

试试这个。

return res.status(200).send('DONE');

exports.controllerFunction = async (req, res) => {
//Get some values
let foos = await User.somefunction();

for(foo in foos){
//Call some async void functions
}
return res.status(200).send('DONE');
}

正如@slebetman在评论中所说,路由器中调用的一个函数不正确:

router.post('/', validation, validate, checkLoggedIn, checkUserPermission(1), async(req, res, next) => {}

确保验证、验证和checkLoggedIn都是函数,而不是返回值

checkUserPermission(1)不正确,因为该函数不希望传递任何参数,改为checkUserPermission后就工作了。

最新更新