2016-02-09 58 views
0

這條航線正常工作:瞭解快遞路由器的NodeJS行爲

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

爲什麼?

+1

'controller.postLog(REQ,RES)'指緊接調用該函數。 'function(req,res)controller.postLog(req,res); }''表示**電話** _我_ **返回**。 – Tushar

回答

1

您立即致電controller.postLog,並將該呼叫的結果傳遞給router.post

假設你不需要訪問thiscontrollerpostLog

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

這傳遞給postLog函數的引用來router.post這是什麼函數希望 - 它需要一個函數的引用,以便它可以用請求和響應對象調用該函數。

如果您需要thispostLogcontroller你可以使用bind產生,這將在controller的上下文中調用一個新的功能:

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