Comment envoyer des messages flash dans Express 4.0?

Donc, mon application Web requiert une authentification, et j'ai une page d'inscription où, si la personne essaie de s'inscrire à un courrier électronique qui est déjà dans la base de données, je souhaite leur montrer un message d'erreur. J'essaie de le faire en utilisant ce code sur le côté html:

<% if (message.length > 0) { %> <div class="alert alert-danger"><%= message %></div> <% } %> 

Et je le fais dans mes routes:

 router.get('/signup', function(req, res) { res.render('/signup', { message: req.flash('signupMessage') }); }); 

J'ai essayé de configurer la configuration avec quelque chose comme suit:

 app.configure(function() { app.use(express.session({ secret : 'keyboard cat' })); }); 

Mais cela me donne un TypeError:

  12:11:38 web.1 | app.configure(function() { 12:11:38 web.1 | ^ 12:11:38 web.1 | TypeError: Object function (req, res, next) { 

Je suis vraiment confus, car je sais que j'ai besoin de sessions pour travailler pour que flash fonctionne, mais les sessions ne semblent pas fonctionner pour moi. J'ai également essayé d'utiliser uniquement des sessions et pas de flash, en utilisant les requêtes de requête. Mais, puisque je n'ai pas de sessions, cela ne fonctionnait évidemment pas.

Des idées? J'utilise Express 4.0.0 Merci

Ce Gist devrait répondre à votre question:

https://gist.github.com/raddeus/11061808

Dans le fichier d'installation de votre application:

 app.use(flash()); 

Mettez cela juste après avoir configuré votre session et votre analyseur de cookies. C'est vraiment tout ce dont vous devriez utiliser Flash.

Vous utilisez:

 req.flash('signupMessage', anyValue); 

Avant de rediriger vers / inscrire à droite?

Voici un petit truc amusant que j'utilise actuellement pour un site personnel (dans mon fichier de demande principal):

 app.use(function(req, res, next){ res.locals.success_messages = req.flash('success_messages'); res.locals.error_messages = req.flash('error_messages'); next(); }); 

Maintenant, chaque vue aura accès à toute erreur ou message de réussite que vous flasherez. Cela fonctionne bien pour moi.

Une dernière chose (c'est nul, mais vous pouvez acquérir des connaissances). Si vous changez:

 <% if (message.length > 0) { %> 

à:

 <% if (message) { %> 

Il fonctionnera de la même manière, mais n'échouera pas si le message est indéfini. Les chaînes non définies et vides sont toutes deux considérées comme des valeurs "fausses" dans javascript.

EDIT: Mon cookie / session / flash setup se déroule comme suit:

 app.use(cookieParser('secretString')); app.use(session({cookie: { maxAge: 60000 }})); app.use(flash()); 

Peut-être que le code de configuration de votre application aiderait. Notez également qu'utiliser app.configure n'est plus nécessaire dans Express 4.

Édition définitive: https://gist.github.com/raddeus/11061808

C'est un exemple pratique. Accédez à localhost: 3000 après avoir exécuté cette application et vous devriez voir ['it worked'] sur votre écran.

https://gist.github.com/brianmacarthur/a4e3e0093d368aa8e423

J'ai également été confus par des messages flash dans Express 4. La confusion pour moi résultait en partie de la distinction entre le concept de messagerie instantanée, un message temporaire disponible pour un modèle et les différentes implémentations de la messagerie instantanée, express-flash , autres modules et middleware personnalisé.

Juste pour étendre l'excellente réponse de Thad Blankenship ci-dessus, j'ai créé un Gist pour le débutant qui comprend deux approches pour les messages flash – le module express-flash et le middleware personnalisé – rendu en jade, en exs ou en guidon.

Le fichier lisez- req.flash(type) comprend des détails sur le getter– req.flash(type) –et setter– req.flash(type, message) méthodes exposées par express-flash et comment elles diffèrent de l'exploitation des res.locals et req.session objets exposés par express-session dans le middleware personnalisé.