ExpressJS 3.0如何将res.locals传递给玉视图?

我想在用户login失败后显示一个Flash消息,但是我不能让variables显示在我的Jade视图中。

我有一些片断,我知道我必须在我的app.configure()中使用它:

app.use (req, res, next) -> res.locals.session = req.session 

在用户input错误的密码后,我将设置闪存信息:

  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 。 我怀疑我正在设置一切正确的。 这个问题很像这个:将Express.js 2迁移到3,特别是app.dynamicHelpers()到app.locals.use? 但我仍然无法工作。 如果有人能给我看一个在res.local中设置值并在视图中访问它们的简单例子,我们将非常感激。

PS我知道连接闪光灯,但我需要了解如何在视图中提供的东西。

这是我的应用程序:

 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的印象。

app.use 之前放置app.use中间件非常重要。 请参阅快递作者TJ Holowaychuck的评论

以下是使用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 

如果使用的是express.session(),则必须在app.configure()内部调用函数express.session() 后面的app.router

app.js

 app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.session()); // Give Views/Layouts direct access to session data. app.use(function(req, res, next){ res.locals.session = req.session; next(); }); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); }); 

index.jade

 extends layout block content h1= title p My req.session.var_name is set to #{session.var_name}