簡體   English   中英

快速處理程序函數參數執行

[英]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());

您將無法獲取reqres參數,並且users.signout函數實際上將立即執行,這意味着app.get函數實際上將收到函數的結果

您可以在文檔中閱讀有關此內容的更多信息。 希望能幫助到你!

express app.get函數將字符串作為第一個參數,將函數作為第二個參數。 當應用程序偵聽路線和查找路線'/signout'它執行在那個瞬間你傳遞給它的第二個參數給函數reqres對象。 聲明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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM