2016-10-03 4 views
0

Я использую Nodejs и Expressjs и Kraken, мне нужно, чтобы отобразить сообщение при добавлении продукта на индекс, но я попробовал много времени для настройки, но сообщения все еще не отображаются, как я ожидаю. Вот мои config.js:Как отобразить сообщение с помощью подключения вспышки и экспресс-сообщений на .dust файл на узле

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

Вы довольно рядом с ответом.

Эта линия

res.locals.messages = require('express-messages')(req, res); 

Магазины функции в messages, которая выводит флэш-сообщения как фрагмент HTML.

res.locals объединен курьерским с моделями, которые используются для визуализации вашего шаблона.

Теперь вам просто нужно вызвать эту функцию из шаблона пыли.

Делать это:

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