我想在用户登录失败后显示一条Flash消息,但是我无法将变量显示在我的Jade视图中。
我有一些作品,我知道我必须在我的app.configure()中使用这个:
app.use (req,res,next) -> res.locals.session = req.session
exports.postSession = (req,res) -> users = require '../DB/users' users.authenticate(req.body.login,req.body.password,(user) -> if(user) req.session.user = user res.redirect(req.body.redirect || '/') else req.session.flash = 'Authentication Failure!' res.render('sessions/new',{title:'New',redirect: req.body.redirect }) )
我不知道如何在我的Jade文件中访问res.locals.session。我怀疑我正在设置一切正确。这个问题很像这样一个:Migrating Express.js 2 to 3,specifically app.dynamicHelpers() to app.locals.use?,但我仍然无法让它工作。如果有人可以向我显示一个在res.local中设置值并在视图中访问它们的简单示例,那将是非常感激的。
附:我知道连接闪存,但我需要了解如何使视图中的东西可用。
这是我的应用程序:
app.configure(() -> app.set('views',__dirname + '/views') app.set('view engine','jade') app.use(express.bodyParser()) app.engine('.jade',require('jade').__express) app.use(express.methodoverride()) app.use(express.cookieParser()) app.use(express.session({ store: new express.session.MemoryStore({reapInterval: 50000 * 10}),secret: 'chubby bunny' })) app.use(express.static(__dirname + '/public')) app.use((req,next) -> res.locals.session = req.session next() ) app.use(app.router) )
解决方法
只是给每个有相同问题的人简短的总结,并得到解决改变res.redirect的印象。
把app.use中间件放在app.router之前是非常重要的。见快递作者TJ Holowaychuck的评论
> https://groups.google.com/d/msg/express-js/72WPl2UKA2Q/dEndrRj6uhgJ
这里是一个使用express v3.0.0rc4的全新安装的例子
app.js:
app.use(function(req,next){ res.locals.variable = "some content"; next(); }) app.configure(function(){ app.set('port',process.env.PORT || 3000); app.set('views',__dirname + '/views'); app.set('view engine','jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodoverride()); app.use(app.router); app.use(express.static(path.join(__dirname,'public'))); });
index.jade:
extends layout block content h1= title p Welcome to #{title} p= variable
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。