微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想在用户登录失败后显示一条Flash消息,但是我无法将变量显示在我的Jade视图中。

我有一些作品,我知道我必须在我的app.configure()中使用这个:

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

并且我将在用户POSTS错误的密码之后设置闪光灯信息:

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 举报,一经查实,本站将立刻删除。

相关推荐