会话闪存消息仅在单独刷新后显示,而不在POST上显示
Session flash messages only showing after a separate refresh and not on POST in express
几周前开始使用Express,终于遇到了我的第一个障碍。我正试图弄清楚如何将flash消息发送到我的视图(layout.jaed)。当我验证用户注册时,它没有通过验证(使用快速验证器),我想写入会话flash消息,然后在页面上显示它。
我现在所做的只有在发布后刷新(例如在controllers/index.js中)时才有效,而且我还需要弄清楚如何只显示一次这个flash消息:
/app.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.jad:
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
的操作吗?我在任何地方都找不到完整的例子,我发现的那些都已经过时了。
看起来您确实在使用一个过时的示例。Express v3.x不再使用分部。请参见在wiki中查看系统更改。而是使用块和包含。
在登录时显示错误消息的一种简单方法是
index.js
app.locals.error = null;
app.post('/login', function(req, res){
var name = req.body.name;
var password = req.body.password;
if (!name || !password) {
res.status(400);
return res.render('login', {
error: 'All fields are required'
});
}
})
app.locals.error = null
将错误的默认值设置为null
。通过这样做,您不必在每次渲染login.jade
且不存在error
时都设置error
变量。
res.render('login', {
error: null
});
你的login.jade
模板可能看起来像这个
extends layout
block content
- if (error)
p= error
form(method='post', action='/login')
p
label(for='name') Username:
input(type='text', name='name', id='name')
p
label(for='password') Password:
input(type='password', name='password', id='password')
p
input(type='submit', value='Submit')
相关文章:
- 运行POST时显示图像
- MVC AJAX POST 请求在控制器中显示为空
- 在 post() 请求后在 jquery 中显示图像
- 通过发送POST参数在ExtJS 4中显示PDF
- jQuery POST to PHP显示在浏览器中,但不显示在PHP文件中
- qoxdoo:POST方法,不在URL中显示参数
- j查询冲突!在WordPress的POST EDIT页面上显示白屏
- 显示微调器,直到 iframe 加载 http post 响应
- 从 ajax .post 方法执行 PHP 页面后显示它
- jQuery $.post() 函数难以不显示结果
- 用于表单验证的 jQuery post 函数只允许 alert() 显示返回的数据
- 显示来自 post jquery 的 json 数据
- 在文本框中显示对 GET 和 POST 请求的响应
- 提交 JQuery 表单 $.post() 处理成功时的显示消息
- 为什么firebug控制台中的POST没有显示任何内容,并且在下面的jQuery代码中没有上传文件
- 使用ajax加载post数据,并且在源中显示类别ID是不安全的
- AJAX POST返回数据未显示
- php post显示空消息,没有输出
- 表单POST未显示在控制器中
- 我如何处理时区/偏移时,显示&;post &;;来自不同的用户