我的一条快递路线出现以下错误:
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
后就工作了。