在Node.js中的Jade模板中使用会话变量

3
除了使用动态辅助函数并通过res.render传递之外,在jade模板文件中是否有其他替代session变量的方法?如果我使用动态辅助函数方法,由于它已被弃用,所以会出现错误。请帮忙。
app.use(function(req, res, next){
            res.locals.user = "xxxx";
            next(); 
        }); 

我把这段代码放在app.configure函数里,但我仍然无法在视图中使用变量user。我需要安装额外的包或编写其他代码吗?

这个有帮助吗?https://dev59.com/Rmgu5IYBdhLWcg3wGTad - Jonathan Lonowski
是的谢谢,但我仍无法访问那个变量。 - Jagan
5
你是否在app.use(app.router)之前使用了自定义中间件?如果是在app.router之后,你需要颠倒它们的顺序。 - Jonathan Lonowski
是的,那就是我犯的错误。非常感谢Jonathan Lonowski。 - Jagan
1个回答

1
这段代码应该可以正常工作。例如,我在我的一个生产系统中正在使用几乎相同的代码:
app.use(function (req, res, next) {
    app.locals.token = req.session._csrf;
    app.locals.user = req.user;
    ...
    next();
});

您需要确保这段代码在设置req.locals.user之后 - 例如,如果您正在使用Passport,则在执行初始化和会话代码之后,但在实际处理和呈现请求之前。


在这种情况下,next()的目的是什么?我知道它对于用户身份验证功能可能很有用,但如果您只是设置app.locals,我们是否需要next()?我删除了next(),但没有它仍然可以正常工作。 - Sahat Yalkabov
下一个(next())调用,没有错误发生,表示这个中间件完成了,但是还需要执行其他中间件。如果不调用next(),我认为不会执行任何其他的中间件。 - Michael Pratt
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Erik Reppen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接