gpt4 book ai didi

node.js - Nodejs Express 3将 session 对象传递给所有 View

转载 作者:太空宇宙 更新时间:2023-11-03 23:09:04 25 4
gpt4 key购买 nike

我想将 session 对象传递给我的所有 View ,这样我就不必在每个路由中手动传递它们。在我用来学习nodejs的书中有一个例子,但是对于express 2:

//session routes

module.exports = function(app){

app.dynamicHelpers({
session: function(req, res){
return req.session;
}
});

app.get(......
res.render(....
....

}

因此dynamicHelpers已被替换。我在 stackoverflow 上发现了一些东西:

  app.use(function(req, res, next){
res.locals.session = req.session;
next();
});

我还在 Express 文档中找到了

  app.use(function(req, res, next){
app.locals.session = req.session;
next();
});

无论如何,在我看来我有类似 <%=session.user%> 的东西在我路线的某个地方我做 req.session.user = "John"我总是收到 500 内部错误: session 未定义。

有什么想法吗?

最佳答案

我明白了。问题是 res.locals 必须在 app.js 文件中的 app.router 之前设置(而不是在路由文件中)!

通过像这样设置我的 app.js 文件:

app.use(express.cookieParser(hash));
app.use(express.session({
secret: hash,
maxAge: 3600000
}));
app.use(function(req, res, next){
res.locals.session = req.session;
next();
});
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

我什至不需要触摸我的路由文件来发送 session 对象。在我看来,我可以使用 <%=session.whatever%>并且它将被显示(仅当我在登录后在 ie 的某些路由中设置了该 session 变量时)。

关于node.js - Nodejs Express 3将 session 对象传递给所有 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23083525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com