我想在用户登录失败后显示提示信息,但我无法在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 }) )
我不知道如何访问res.locals.session我的Jade文件。我怀疑我是否将所有设置正确。这个问题很像这样:将Express.js2迁移到3,特别是将app.dynamicHelpers()迁移到app.locals.use?但我仍然无法正常工作。如果有人可以向我展示一个简单的示例,说明如何在res.local中设置值并在视图中访问它们,将不胜感激。
res.locals.session
ps我确实了解connect-flash,但是我需要了解如何使视图中的内容可用。
这是我的应用程序:
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, res, next) -> res.locals.session = req.session next() ) app.use(app.router) )
只是给每个有同样问题并得到改变的印象的人一个简短的摘要res.redirect。
res.redirect
将app.use中间件放在 前面 非常重要app.router。请参阅《快报》作者TJ Holowaychuck的评论
app.use
app.router
这是使用Express v3.0.0rc4的全新安装的示例
app.js:
app.use(function(req, res, 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