Как мне использовать 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>
Другие вопросы по тегам