我正在编写一个关于使用Node.js包Passport(link)进行用户身份验证的优秀教程,我遇到了一段我真不理解的代码:
app.get('/profile', isLoggedIn, function(req, res) {
res.render('profile.ejs', {
user : req.user // get the user out of session and pass to template
});
});
我的问题是isLoggedIn
参数。我查看了官方网站,并进行了一些谷歌搜索,但没有说它可以将三个参数传递到app.get
。我只见过两个。这第三个(可选,我假设)参数是什么?
我不是在询问isLoggedIn
本身,而是询问它是我之前从未见过的第三个参数app.get()
。< / p>
答案 0 :(得分:3)
它被称为中间件,它在第三个参数(回调)之前被调用。
中间件功能示例:访问检查,在传递资源之前检查用户是否已登录等。
答案 1 :(得分:2)
它在快速文档中:http://expressjs.com/en/5x/api.html#app.get
语法是:
app.get(path, callback [, callback ...])
IE。
app.get(path, ...callback)
语法包括将路径作为第一个参数,然后是您想要的任意数量的中间件(可以访问请求和响应)回调函数。它不仅限于一种。它们是异步的,并通过调用 next() 参数链接在一起。
function callbackOne(req, res, next) {
//some code
next();
}
function callbackTwo(req, res, next) {
//some code
res.render();
}
app.get(path, callbackOne, callbackTwo)
因此,在您的情况下,isLoggedIn 参数只是另一个中间件函数,最终调用 next() 将执行带到您的第三个参数。