Javascript 在路由中创建的会话在其他路由中不可用

Javascript 在路由中创建的会话在其他路由中不可用,javascript,node.js,express,express-session,Javascript,Node.js,Express,Express Session,我正在尝试在node.js应用程序中设置会话。为了做到这一点,我使用模块“express”、“express session”和“express mysql session”将它们存储在服务器上的数据库中。只要我只访问创建会话的路由内的req.session参数,我的代码就可以正常工作。在其他路由(甚至启动文件)中,创建的参数会抛出未定义的错误 我已经尝试在启动文件中创建app.use(session(…))。如果我这样做,一切都正常,在某些路由中创建的参数也可以在其他路由中使用。但是,由于我希

我正在尝试在node.js应用程序中设置会话。为了做到这一点,我使用模块“express”、“express session”和“express mysql session”将它们存储在服务器上的数据库中。只要我只访问创建会话的路由内的req.session参数,我的代码就可以正常工作。在其他路由(甚至启动文件)中,创建的参数会抛出未定义的错误

我已经尝试在启动文件中创建app.use(session(…))。如果我这样做,一切都正常,在某些路由中创建的参数也可以在其他路由中使用。但是,由于我希望使启动文件尽可能小,这些代码行应该在一个路由中处理

这是我的密码: login.js(路由)

当我加载localhost/test时,我仍然可以在web开发人员工具中看到cookie。但“req.session.username”未定义


谢谢你的帮助

req.session
仅在会话中间件执行后发生的路由中可用(取决于顺序)。而且,如果会话中间件仅在一个路由器上,则该
req.session
将仅在与该路由器匹配的路由中可用,并且仅在该路由器在给定请求上运行之后可用

因此,如果您希望
req.session
在所有路由中都有效,则需要尽早定义中间件,并且中间件可以在所有可能的路由(您希望在其上使用它)上运行,而不仅仅是在某些仅在某些路径上运行的路由器上运行


记住,是您的会话中间件在任何给定的传入请求上设置
req.session
。在您想要访问
req.session
之前,它必须在给定的请求上运行

您不必将会话中间件直接放入启动文件中。您仍然可以将其放入自己的模块中,您只需从启动文件加载该模块,并将
app
对象传递给它,这样它就可以在任何路由之前初始化全局中间件

下面是一个示例启动文件:

const express = require('express');
const app = express();

// initialize global middleware
require('./myMiddleware')(app);

// set up other routers and routes here
// and start the server
还有一个myMiddlware.js文件:

// load and initialize session stuff
const session = ....;

module.exports = function(app) {
    // install session middleware
    app.use(session(...))
}

req.session
仅在会话中间件执行后发生的路由中可用(取决于顺序)。而且,如果会话中间件仅在一个路由器上,则该
req.session
将仅在与该路由器匹配的路由中可用,并且仅在该路由器在给定请求上运行之后可用。因此,如果您希望
req.session
在所有路由上都有效,则需要尽早定义中间件,并且中间件可以在所有可能的路由(您希望在其上使用它)上运行,而不仅仅是在某些仅在某些路径上运行的路由器上运行。请记住,是您的会话中间件在任何给定的传入请求上设置
req.session
。在您想要访问
req.session
@jfriend00 Ok谢谢您之前,它必须在给定的请求上运行。这就是我所期望的情况。所以现在我将在我的应用程序的启动文件中定义我的会话。我只是希望有更好的解决方案,这样我的启动文件就可以尽可能简单。
const express = require('express');
const app = express();

// initialize global middleware
require('./myMiddleware')(app);

// set up other routers and routes here
// and start the server
// load and initialize session stuff
const session = ....;

module.exports = function(app) {
    // install session middleware
    app.use(session(...))
}