这条路线很好用:
router.post('/addlog', multipartMiddleware, function(req,res){
controller.postLog(req,res);
});
但如果我改变这样的电话:
router.post('/addlog', multipartMiddleware, controller.postLog(req,res));
节点抱怨ReferenceError: req is not defined
。控件位于一个单独的文件中:
exports.postLog = function(req, res, next) {
console.log(req.body);
res.status(200).send('OK');
}
为什么?
答案 0 :(得分:1)
您立即致电controller.postLog
并将该通话结果传递给router.post
。
假设您不需要在this
内controller
postLog
访问{/ 1}}:
router.post('/addlog', multipartMiddleware, controller.postLog);
这将对postLog
函数的引用传递给router.post
,这是函数所期望的 - 它需要对函数的引用,以便它可以使用请求和响应对象调用该函数。
如果您需要在this
内postLog
引用controller
,您可以使用bind
生成一个新功能,该功能将在{{1}的上下文中调用}:
controller
答案 1 :(得分:1)
问题不在路由器行为中,下面是关于JS中回调的文章。
http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/