我使用 Nodejs 和 Expressjs 以及 Kraken ,我需要在索引上添加产品时显示消息,但我尝试过很多时候配置,但消息仍然没有像我期望的那样出现。这是我的config.js:
var flash = require('connect-flash');
app = module.exports = express();
app.use(kraken(options));
//flash
app.use(flash());
app.use(function (req, res, next) {
res.locals.messages = require('express-messages')(req, res);
next();
});
我的控制器:
router.post('/somePath', function (req, res) {
//something to do to add
res.flash('messages','Add success!!')
res.render('path/index');
});
我的index.dust文件:
`{>"layouts/master" /}
{<body}
{messages|s}
// body goes here
{/body}
`
答案 0 :(得分:2)
你非常接近答案。
这一行
res.locals.messages = require('express-messages')(req, res);
在messages
中存储一个函数,该函数将flash消息作为html片段输出。
res.locals
通过express与用于渲染模板的模型合并。
现在您只需要一种从灰尘模板中调用此功能的方法。
这样做:
{messages|s}
实际上并没有调用该函数。您需要将其称为上下文帮助程序:
{#messages /}
你有最后一道障碍要清除。
express-messages
期望的函数签名与粉尘提供的函数签名不同,因此您必须将其包装在辅助函数中(在server.js文件中):
app.use(flash());
app.use(function (req, res, next) {
var messages = require('express-messages')(req, res);
res.locals.messages = function (chunk, context, bodies, params) {
return chunk.write(messages());
};
next();
});