了解express nodeJs路由器的行为

时间:2016-02-09 11:20:32

标签: javascript node.js express

这条路线很好用:

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');
}

为什么?

2 个答案:

答案 0 :(得分:1)

您立即致电controller.postLog并将该通话结果传递给router.post

假设您不需要在thiscontroller postLog访问{/ 1}}:

router.post('/addlog', multipartMiddleware, controller.postLog);

这将对postLog函数的引用传递给router.post,这是函数所期望的 - 它需要对函数的引用,以便它可以使用请求和响应对象调用该函数。

如果您需要在thispostLog引用controller,您可以使用bind生成一个新功能,该功能将在{{1}的上下文中调用}:

controller

答案 1 :(得分:1)

问题不在路由器行为中,下面是关于JS中回调的文章。

http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/