幾周前開始使用Express,最後打到我的第一個路障。我想弄清楚如何發送一個Flash消息到我的視圖(layout.jade)。當我驗證用戶註冊並驗證失敗時(使用express-validator),我想寫入會話Flash消息,然後在頁面上顯示它。會話刷新消息僅在單獨刷新後顯示,而不顯示在快速POST後
我現在正在做的,如果我只刷新工程完成後過帳(例如,在控制器/ index.js),我還需要弄清楚如何只能讓這個Flash消息顯示一次:
/應用.js文件
/*
* Configuration
*/
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(expressValidator);
app.use(express.cookieParser());
app.use(express.bodyParser({ uploadDir : './' }));
app.use(express.methodOverride());
app.use(viewHelpers());
app.use(function(req, res, next){
res.locals.messages = req.session.messages || {};
delete req.session.messages;
next();
});
app.use(express.session({
secret: config.secret,
cookie: {
maxAge: 365 * 24 * 60 * 60 * 1000
},
store: new MongoStore(config.db)
}));
app.use(express.static(__dirname + '/public'));
app.use(app.router);
});
/views/layout.jade:
div.alert.alert-error
- if (typeof messages !== "undefined")
!=partial('session_flash', { messages : messages })
/views/partials/session_flash.jade:
個div.alert.alert-error
each message in messages
=message
/controllers/index.js
req.assert(['user', 'username'], 'Please enter a valid username').len(3, 23);
req.assert(['user', 'email'], 'Please enter a valid email').isEmail();
req.assert(['user', 'password'], 'Please enter a valid password').len(3, 23);
req.session.messages = 'Please fix the errors below';
errors = req.validationErrors();
if (errors) {
console.log(errors);
res.render('join', {
title : 'Join -',
errors: errors,
params: params
});
return;
}
難道只有顯示出來後,我刷新(一POST之後),因爲我從渲染內/controllers/index.js
聯接模板,而不是/app.js
?另外,我應該在我的配置中做類似delete req.session.messages
的事情嗎?我無法在任何地方找到完整的例子,而我發現的例子已經過時。
你看着連接閃了嗎? – chovy 2013-02-10 23:06:40