问题描述
只是给每个有同样问题并得到改变的印象的人一个简短的摘要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
解决方法
我想在用户登录失败后显示提示信息,但我无法在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,next) ->
res.locals.session = req.session
next()
)
app.use(app.router)
)