[英]Express handler function parameter execution
快遞路線設置如下
var users = require('../../app/controllers/users.server.controller');
// Set up the 'signout' route
app.get('/signout', users.signout);
但是,由於不存在括號,這意味着正在傳遞函數users.signout而不執行?
github上的文件可以在這里找到
users.signout函數如下所示
// Create a new controller method for signing out
exports.signout = function(req, res) {
// Use the Passport 'logout' method to logout
req.logout();
// Redirect the user back to the main application page
res.redirect('/');
};
github上的文件可以在這里找到
為什么執行users.signout? 以及如何傳遞req和res參數?
使用時
app.get('/signout', users.signout);
Express.js基本上在內部存儲給定的函數users.signout
,並保持與/signout
路徑的關聯。
在此路由上發出請求時,Express.js將獲取相應的存儲函數並以以下形式大致調用它:
// `storedFunction` corresponds to your `users.signout` function
storedFunction(expressReq, expressRes, expressNextCallback);
如果要呼叫,則在通話中使用users.signout
函數,即
app.get('/signout', users.signout());
您將無法獲取req
和res
參數,並且users.signout
函數實際上將立即執行,這意味着app.get
函數實際上將收到函數的結果 。
您可以在文檔中閱讀有關此內容的更多信息。 希望能幫助到你!
express app.get
函數將字符串作為第一個參數,將函數作為第二個參數。 當應用程序偵聽路線和查找路線'/signout'
它執行在那個瞬間你傳遞給它的第二個參數給函數req
和res
對象。 聲明app.get('/signout', users.signout);
不執行該函數app.get('/signout', users.signout);
。
可以編寫相同的代碼(假設您正在使用Passport來使用logout
方法):
app.get('/signout', function(req, res) {
// Use the Passport 'logout' method to logout
req.logout();
// Redirect the user back to the main application page
res.redirect('/');
});
它實際上是傳遞給第二個參數的函數 app.get
,但在同一個地方它的邏輯的明確聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.