Как мне использовать req.flash() с nunjucks?
Я использую Connect-Flash для передачи флеш-сообщения. В моем контроллере я использую следующий код if (!req.user) {
req.flash("error_msg", "User not found !!");
return res.redirect(307, '/');
}
На мой взгляд, я пытался
{{ сообщение об ошибке }}
{{req.flash ('error_message')}}
{{req.flash.get ('error_message')}}
Но ничего из этого не работает. Какой текущий синтаксис для разбора флеш-сообщения в nunjucks?
4 ответа
Если вы используете экспресс-js и nunjucks в качестве шаблона, это то, что я сделал
в app.js
const flash = require('express-flash');
app.use(flash());
в коде маршрутов / контроллера
try {
await User.deleteOne({_id:req.params._id}).exec()
req.flash("success_msg", "User deleted");
return res.redirect('/admin/users')
}
в макете или в файле просмотра
{% if messages.success_msg %}
<div class="alert alert-success" role="alert">
{{ messages.success_msg }}
</div>
{% endif %}
Для тех, кто сталкивается с той же проблемой, вы можете получить доступ к переменной с помощью {{ req.session.flash.error_msg }}
Прежде всего, вам нужно установить "express-flash" и поместить код ниже в app.js
app.js
const flash = require('express-flash');
В вашем контроллере введите ниже код, когда вы хотите передать сообщение
req.flash('error_msg', "User not found !!");
return res.redirect(307, '/');
Введите код ниже в вашем файле просмотра, где вы хотите отобразить сообщение
<% if (typeof messages.error_msg !='undefined') { %>
<p class="error"><%= messages.error_msg %></p>
<% } %>
С
connect-flash
пакет, вы не можете напрямую использовать
req.flash
в шаблонизаторе. Вам нужно добавить промежуточное программное обеспечение, которое добавляет флэш-сообщение в
res.locals
к которым можно получить доступ в рендеринге шаблона.
Вот краткий фрагмент кода.
// this part should be before all the request resolver.
// adding flash function to response locals
app.use((req,res,next)=>{
res.locals.flash = (arg) => { return req.flash(arg) };
next();
});
// request resolver
app.get("/",(req,res)=>{
req.flash("info","show me");
res.render("index.njk",{});
});
app.listen(8080,()=>{...})
В файле нунджакс:
<h3>{{ flash("info") }}</h3>