Node.js 下一步是什么;在这个代码中?

Node.js 下一步是什么;在这个代码中?,node.js,express,Node.js,Express,有一行代码使用next;在这个我不理解的Nodejs快速应用程序中。我不知道你能否澄清一下 在index.js中,express应用程序调用函数isLoggedInMiddleware。它不传递任何参数 app.use(sessionHandler.isLoggedInMiddleware); 这就是这个函数。调用它时,没有传递任何参数,但它被设置为接受三个,下一个是最后一个,它被称为getUsername的返回值 this.isLoggedInMiddleware = function(r

有一行代码使用next;在这个我不理解的Nodejs快速应用程序中。我不知道你能否澄清一下

在index.js中,express应用程序调用函数isLoggedInMiddleware。它不传递任何参数

 app.use(sessionHandler.isLoggedInMiddleware);
这就是这个函数。调用它时,没有传递任何参数,但它被设置为接受三个,下一个是最后一个,它被称为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;作为callbak的一部分传递给。你能解释下一步怎么做吗;有人在用吗?在这种情况下是什么?它在干什么

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);
        });
    }

它将控制权传递回express应用程序,以调用链中的下一个中间件/请求处理程序

在这里:

您告诉express使用IsLoggeDin中间件作为中间件

每个中间件接收:

请求-充实和/或查询, 回答-如果他们想写一些东西,例如,一个错误, 允许express继续处理请求的回调。
当express调用该中间件时,该中间件使用用户数据丰富请求对象,然后将控件返回给express,然后express继续下一个中间件或处理程序

据我所知,它将控制权传递给下一个路由处理程序来处理请求。请继续阅读。

您将传递函数与调用函数混为一谈

这不是正在调用的IsLoggeDin中间件;它只是被通过了。app.use接受一个应该是函数的参数;在请求期间,它将使用适当的参数调用该函数—请求对象、响应对象和回调

同样地

sessions.getUsername(session_id, function(err, username) {
    "use strict";

    if (!err && username) {
        req.username = username;
    }
    return next();
});

next的返回值未传递给getUsername;整个函数正在被传递。通过调用next,它将控制权传递回express框架,说,基本上,我完成了;调用下一个中间件。

我认为调用下一个中间件意味着请转到列表中的下一个中间件。然而,更有趣的是,为什么在它之前会有一个返回。

那么这在代码中可能是不可见的?只是express框架的一部分?关于中间件的进一步讨论:
app.use(sessionHandler.isLoggedInMiddleware);
sessions.getUsername(session_id, function(err, username) {
    "use strict";

    if (!err && username) {
        req.username = username;
    }
    return next();
});