在这个Express应用程序(对于Nodejs)中使用next();
的代码行我不明白。我想知道你是否可以澄清一下。
在index.js中,快递应用程序调用函数isLoggedInMiddleware。它没有传递任何参数
app.use(sessionHandler.isLoggedInMiddleware);
这是该功能。当它被调用时,它没有传递任何参数,但它被设置为接受三个,next
是最后一个,它被称为getUsername的返回值。
this.isLoggedInMiddleware = function(req, res, next) {
var session_id = req.cookies.session;
sessions.getUsername(session_id, function(err, username) {
"use strict";
if (!err && username) {
req.username = username;
}
return next();
});
}
这是getUserName next();被传递给callbak的一部分。你能解释一下next();正在使用?在这种情况下它是什么?它在做什么?
this.getUsername = function(session_id, callback) {
"use strict";
if (!session_id) {
callback(Error("Session not set"), null);
return;
}
sessions.findOne({ '_id' : session_id }, function(err, session) {
"use strict";
if (err) return callback(err, null);
if (!session) {
callback(new Error("Session: " + session + " does not exist"), null);
return;
}
callback(null, session.username);
});
}
答案 0 :(得分:1)
它将控件传递回Express应用程序以调用链中的下一个中间件/请求处理程序。
下面:
app.use(sessionHandler.isLoggedInMiddleware);
你告诉快递使用isLoggedInMiddleware
作为中间件。
每个中间件都会收到:
当通过express调用时,该中间件使用用户数据丰富请求对象,然后将控制返回到express,然后继续到下一个中间件或处理程序。
答案 1 :(得分:1)
据我所知,它将控制传递给下一个路由处理程序来处理请求。阅读Route Middleware。
答案 2 :(得分:0)
通过调用来传递一个函数。
app.use(sessionHandler.isLoggedInMiddleware);
这不是isLoggedInMiddleware
被调用的;它只是被传递了。 app.use
接受一个应该是函数的参数;在请求期间,它将使用适当的参数(请求对象,响应对象和回调)调用该函数。
类似地,
sessions.getUsername(session_id, function(err, username) {
"use strict";
if (!err && username) {
req.username = username;
}
return next();
});
next
的返回值未传递给getUsername
;整个功能正在传递。通过调用next
,它将控制权传递回快速框架(基本上说,“我已经完成了;调用下一个中间件”)。
答案 3 :(得分:0)
我认为很明显, next 的调用意味着“请转到列表中的下一个中间件”。然而,更有趣的是为什么在它之前有 return 。