一尘不染

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

node.js

我想在用户登录失败后显示提示信息,但我无法在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中设置值并在视图中访问它们,将不胜感激。

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)
)

阅读 255

收藏
2020-07-07

共1个答案

一尘不染

只是给每个有同样问题并得到改变的印象的人一个简短的摘要res.redirect

app.use中间件放在 前面 非常重要app.router。请参阅《快报》作者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
2020-07-07