kyd*_*oco 6 node.js express express-session
我正在摆弄 Express JS,并且正在使用express-session。app.use(session())如果我不把中间件放在第一位的话是行不通的
app.use(session({
name: 'server-session-cookie-id',
secret: 'my express secret',
saveUninitialized: true,
resave: true
}));
app.use('/', routes);
app.set("view engine", "pug");
app.set("views", path.join(__dirname + "/views"));
app.use(flash());
Run Code Online (Sandbox Code Playgroud)
如果app.use(session())先写它会说 thereq.session.someVariable未定义。
有人能解释一下 Express 如何调用 app.use 中间件吗?
jfr*_*d00 10
所有 Express 路由处理程序(无论是app.use()、app.get()或app.post()其他)都会按照注册的顺序检查路由匹配。此外,一旦路由发送了请求并且没有调用next(),则不再检查其他路由是否与当前请求匹配。该请求的所有处理都将完成。
因此,您必须将任何中间件放在任何想要使用该中间件结果的请求之前。
有些人认为app.use()可能会检查所有处理程序是否匹配,并可能在任何处理程序之前执行(如果它们与请求匹配app.get())app.post()。事实并非如此。无论处理程序是什么类型,它们的注册顺序都有一个处理程序顺序。
如果我不把中间件放在第一位的话是不行的
app.use(session())。
如果会话中间件不在想要使用会话的请求处理程序之前,那么当该请求处理程序运行时,会话变量还不会被初始化,并且会话变量req.session本身将被初始化undefined。
您必须将会话中间件放置在任何想要使用会话变量的请求处理程序之前。