Node – Flash

Komunikaty przenoszone między wywołaniami przez req.session.flash – dostępne w widokach poprzez res.local.flash

Szablon flash’a w layou’cie tuż pod nagłówkiem
{{#if flash}}
  <div class="alert alert-dismissible alert-{{flash.type}}">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
    <strong>{{flash.intro}}</strong> {{{flash.message}}}
  </div>
{{/if}}
lib/middleware/flash.js – przenosi komunikat z sesji do kontekstu (locals) i kasuje sesję
module.exports = (req, res, next) => {
  res.locals.flash = req.session.flash
  delete req.session.flash
  next()
})
index.js – główny plik
const flashMiddleware = require('./lib/middleware/flash')
app.use(flashMiddleware)

Generowanie komunikatów – w routingu – ustawienie sesji req.session.flash

app.post('/newsletter', function(req, res) {
  const email = req.body.email || ''

  if(! VALID_EMAIL_REGEX.test(email)) {
    req.session.flash = {
      type: 'danger',
      intro: 'Błąd walidacji!',
      message: 'Adres email jest niepoprwany.',
    } 
 return res.redirect(303, '/newsletter')
}
  • Strona musi być przekierowana aby komunikat z sesji został przekazany do kontekstu.
  • Jeśli nie można przekierować strony to należy od razu ustawić kontekst: res.locals.flash
  • Dla wywołań AJAX nie używamy flash-a – odpowiedź jako ajax należy obrobić po stronie klienta (wyświetlić)