快速路线设置如下
var users = require('../../app/controllers/users.server.controller');
// Set up the 'signout' route
app.get('/signout', users.signout);
但是,由于括号不存在,这意味着函数users.signout正在传递而不被执行?
可以找到github上的文件here
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上的文件here
为什么users.signout已执行?它是如何通过req和res参数传递的?
答案 0 :(得分:3)
使用时
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
函数实际上会接收功能的结果。
您可以阅读有关此in the documentation的更多信息。希望它有所帮助!
答案 1 :(得分:2)
express app.get
函数将字符串作为第一个参数,将函数作为第二个参数。当应用程序侦听路由并找到路由'/signout'
时,它会在该时刻执行 ,您在第二个参数中提供的函数将req
和{{1}传递给它对象。
该函数在声明res
时没有执行。
可以编写相同的代码(假设您使用Passport来使用app.get('/signout', users.signout);
方法):
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('/');
});
的第二个参数,但在同一个地方明确声明其逻辑。