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ć)