我是个菜鸟。我有个问题。我用passport-google-oauth20
app.get('/auth/google/secrets',
passport.authenticate('google',{failureRedirect: '/login'}),
function(req,res){
res.redirect('/secrets');
});
正如你可以清楚地看到,这个路由器(app.get())有3个参数,这是我第一次使用这样的东西,有人能解释一下这背后的逻辑/理论吗?
通常我使用
app.get('/somepage' , function(req,res,next){//something});
但在这种特殊情况下,有3个参数。你能为我提供任何文件,为这种特殊情况?
代码很好,我只是需要一个解释。
1条答案
按热度按时间6uxekuva1#
app.get()
至少接受两个参数,如文档中所示,但您可以根据需要传递任意多个回调(一个或多个):你传递的每个回调函数都是一个接一个地执行的,第二个回调函数直到第一个回调函数在其处理程序中调用
next()
时才会执行,其他回调函数依此类推。这就允许你有一个专门针对这个路由的中间件,在你的问题中,它插入了一些中间件来要求在主请求处理程序执行之前进行身份验证。
如果认证失败,中间件会响应,不调用最后一个回调,如果认证通过,调用
next()
,执行最后一个回调。下面是一个示例:
这显示了四个请求处理程序被传递到一个
app.get()
。在服务器上的调试控制台中的输出将是:并且,此请求的响应将是:
第四个处理程序不会被调用,因为第三个处理程序不会调用
next()
,而只是对请求发送一个响应。