aey*_*ang 19 session response node.js express pug
我希望在用户登录失败后显示flash消息,但我无法让我的Jade视图中显示变量.
我有一些部分,我知道我必须在我的app.configure()中使用它:
app.use (req, res, next) ->
res.locals.session = req.session
Run Code Online (Sandbox Code Playgroud)
我会在用户输入错误密码后设置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 })
)
Run Code Online (Sandbox Code Playgroud)
我不知道如何访问res.locals.session我的Jade文件.我怀疑我是否正确设置一切.这个问题很像这个:将Express.js 2迁移到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)
)
Run Code Online (Sandbox Code Playgroud)
zem*_*rco 36
只是为每个遇到相同问题的人做一个简短的总结,并得到解决后的变化res.redirect.
以前放置app.use中间件非常重要.请参阅快递作者TJ Holowaychuck的评论 app.router
以下是使用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')));
});
Run Code Online (Sandbox Code Playgroud)
index.jade:
extends layout
block content
h1= title
p Welcome to #{title}
p= variable
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您正在使用express.session(),则必须调用函数后 express.session() ,但前 app.router,app.configure内().
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')));
});
Run Code Online (Sandbox Code Playgroud)
index.jade
extends layout
block content
h1= title
p My req.session.var_name is set to #{session.var_name}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29997 次 |
| 最近记录: |