Express.js 应用程序错误:不呈现 flash 消息
Express.js application bug: flash messages are not rendered
我正在研究 blogging application (click the link to see the GitHub repo) with Express, EJS 和 MongoDB。
我 运行 在每次 CRUD 操作后尝试添加即显消息时遇到麻烦。
对于添加 Post(操作本身 有效),我有:
exports.addPost = (req, res, next) => {
const post = new Post();
post.title = req.body.title;
post.short_description = req.body.excerpt
post.full_text = req.body.body;
post.save(function(err){
if(err){
console.log(err);
return;
} else {
// Confirmation message
req.flash('success', "Post added");
res.redirect('/dashboard');
}
});
}
在我的 index.js 文件中,我添加了所有必要的包和中间件:
const expressValidator = require("express-validator");
const flash = require("connect-flash");
const session = require("express-session");
// more code
// Express Sessions Middleware
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}));
// Express Messages Middleware
app.use(flash());
app.use(function (req, res, next) {
res.locals.messages = require('express-messages')(req, res);
next();
});
// Express Validator Middleware
app.use(expressValidator({
errorFormatter: function(param, msg, value) {
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length) {
formParam += '[' + namespace.shift() + ']';
}
return {
param : formParam,
msg : msg,
value : value
};
}
}));
消息模板(采用 https://github.com/visionmedia/express-messages 格式并稍作修改):
<div id="messages">
<% Object.keys(messages).forEach(function (type) { %>
<% messages[type].forEach(function (message) { %>
<div class="alert alert-<%= type %>"><%= message %></div>
<% }) %>
<% }) %>
</div>
我以为我做的一切都正确,但消息容器呈现为空:
<div id="messages">
// messages should be here
</div>
缺少什么?
注:我用的express-validator
版本是3.2.1
.
Flash 消息是异步的,因此您需要包装、重定向:
req.flash('success', "Post added");
req.session.save(() => res.redirect('/dashboard'));
像这样。
我正在研究 blogging application (click the link to see the GitHub repo) with Express, EJS 和 MongoDB。
我 运行 在每次 CRUD 操作后尝试添加即显消息时遇到麻烦。
对于添加 Post(操作本身 有效),我有:
exports.addPost = (req, res, next) => {
const post = new Post();
post.title = req.body.title;
post.short_description = req.body.excerpt
post.full_text = req.body.body;
post.save(function(err){
if(err){
console.log(err);
return;
} else {
// Confirmation message
req.flash('success', "Post added");
res.redirect('/dashboard');
}
});
}
在我的 index.js 文件中,我添加了所有必要的包和中间件:
const expressValidator = require("express-validator");
const flash = require("connect-flash");
const session = require("express-session");
// more code
// Express Sessions Middleware
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}));
// Express Messages Middleware
app.use(flash());
app.use(function (req, res, next) {
res.locals.messages = require('express-messages')(req, res);
next();
});
// Express Validator Middleware
app.use(expressValidator({
errorFormatter: function(param, msg, value) {
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length) {
formParam += '[' + namespace.shift() + ']';
}
return {
param : formParam,
msg : msg,
value : value
};
}
}));
消息模板(采用 https://github.com/visionmedia/express-messages 格式并稍作修改):
<div id="messages">
<% Object.keys(messages).forEach(function (type) { %>
<% messages[type].forEach(function (message) { %>
<div class="alert alert-<%= type %>"><%= message %></div>
<% }) %>
<% }) %>
</div>
我以为我做的一切都正确,但消息容器呈现为空:
<div id="messages">
// messages should be here
</div>
缺少什么?
注:我用的express-validator
版本是3.2.1
.
Flash 消息是异步的,因此您需要包装、重定向:
req.flash('success', "Post added");
req.session.save(() => res.redirect('/dashboard'));
像这样。