【发布时间】:2012-09-15 00:42:30
【问题描述】:
我想在用户登录失败后显示一条消息,但我无法让变量显示在我的 Jade 视图中。
我有一些片段,我知道我必须在我的 app.configure() 中使用它:
app.use (req, res, next) ->
res.locals.session = req.session
我会设置用户 POST 错误密码后的 flash 信息:
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 中设置值并在视图中访问它们的简单示例,将不胜感激。
附言我确实知道 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)
)
【问题讨论】:
-
p.p.s 这方面的文档在哪里?我一直在看Migration guide、Express site 和Connect website,但我仍然无法弄清楚......也许只有我一个人,但我觉得我正在努力学习 ExpressJS,因为它的文档是如此稀疏。
-
你不能以
session.flash访问它? -
当我在 Jade 中执行此操作时:
- if(session.flash)它给了我一个错误,提示会话未定义.. 但是我如何在上面进行设置没有任何问题? -
你的 app.use 是关于 app.router 还是 app[VERB]?
-
app[VERB] 类似于 app.get app.post。这些都是 app.use(app.router) 中的所有路由,应该在任何其他
app.use之后,除了任何错误处理程序。你把它们按什么顺序排列?
标签: node.js session express response pug