如何在Node上的.dust文件中使用connect-flash和express-messages显示消息

时间:2016-10-03 10:11:22

标签: javascript node.js express dust.js kraken.js

我使用 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}

`

1 个答案:

答案 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();
});