2012-06-25 191 views
5

Quiero poder mostrar un mensaje al cliente con Express y EJS. Miré por todas partes y todavía no puedo encontrar un ejemplo o tutorial. ¿Podría alguien decirme la forma más fácil de mostrar un mensaje?¿Cómo uso req.flash() con EJS?

Gracias!

Respuesta

2
<% if (message) { %> 
    <div class="flash"><%= message %></div> 
<% } %> 

¿Esto es lo que quieres? Puede usar algunos JS del lado del cliente para que se desvanezca. Ejemplo de jQuery:

var message = $('.message'); 
if (message.length) { 
    setTimeout(function() { 
     message.fadeOut('slow'); 
    }, 5000); 
} 
+0

Esto no funciona con 'req.flash()' por lo que puedo decir. –

1

req.flash() pueden utilizarse de dos maneras.

Si utiliza dos argumentos

req.flash(type, message); 

donde type es un tipo de mensaje y message es el mensaje real (ambas cadenas), entonces se añade message a la cola de tipo type. Al usarlo con un argumento

req.flash(type); 

vuelve matriz de todos los mensajes de tipo type y vacía la cola. Además, este método se adjunta a la sesión, por lo que funciona por sesión. En otras palabras, cada usuario tiene su propio conjunto de colas flash. Así que en su vista se puede hacer algo como esto:

var messages = req.flash('info'); 

y luego enviar la variable messages a la plantilla y utilizarla allí (tenga en cuenta que messages es una matriz y se puede repetir ella). Recuerde que al usar req.flash('info', 'test'); se adjuntará un mensaje test de tipo infosolo para un usuario actual (asociado con el objeto req).

Tenga en cuenta que este mecanismo es bastante débil. Por ejemplo, si un usuario hace doble clic en el enlace (dos solicitudes se envían al servidor), no verá los mensajes, porque la primera llamada vaciará la cola (por supuesto, a menos que la solicitud genere mensajes).

+1

Esto todavía no me dice cómo lo visualizo en una plantilla (EJS). Ya sé cómo funciona 'req.flash()'. –

+0

¿Entonces no sabes cómo usar el motor de plantillas? Entonces, ¿por qué preguntaste sobre 'req.flash()'? Esto no tiene nada que ver con 'flash'. ¿Sabes cómo pasar y usar variables en EJS? – freakish

+0

Nunca dije eso. Quiero decir, ¿cómo lo visualizo en mi opinión? Y sí, he estado usando Express + EJS por años. Simplemente nunca tuve que usar mensajes flash. Tiene algo que ver con flash, quiero saber cómo visualizo el mensaje flash en mi opinión. –

0

Si utiliza el módulo auxiliar de mensajes expresos de visionmedia, se vuelve muy simple. Github link

Como se dice en documentos del módulo:

instalar el módulo con NGP

npm install express-messages 

A continuación, asigne un ayudante dinámico para los mensajes de la aplicación.config:

app.dynamicHelpers({ messages: require('express-messages') }); 

En el archivo de EJS, inserte el siguiente al que desea que los mensajes

<%- messages() %> 

EJS hace esto en:

<div id="messages"> 
    <ul class="info"> 
    <li>Email queued</li> 
    <li>Email sent</li> 
    </ul> 
    <ul class="error"> 
    <li>Email delivery failed</li> 
    </ul> 
</div> 

(por supuesto, se puede alterar lo que se se representa en el código del módulo)

Luego, para mostrar un mensaje, incluya una llamada a:

req.flash('info', 'Your message goes here'); 
+0

Lamento comentar en una publicación anterior, pero ahora los mensajes express solo funcionan con Express 2.x. –

4

Sé que esto es una cuestión de edad, pero recientemente me encontré con él cuando se intenta comprender mensajes flash y plantillas a mí mismo, así que espero que esto ayude a otros en mi situación. Teniendo en cuenta el caso de Express 4, el módulo de flash express y una plantilla de ejs, aquí hay 2 rutas y una plantilla que debe comenzar.

Primero generar el mensaje de flash que desea mostrar. Aquí el método app.all() se mapea a /express-flash. Solicite baseurl/express-flash para crear un mensaje utilizando el método setter req.flash(type, message) antes de ser redirigido a baseurl/.

app.all('/express-flash', req, res) { 
    req.flash('success', 'This is a flash message using the express-flash module.'); 
    res.redirect(301, '/'); 
} 

Siguiente en el mapa los mensaje a la plantilla en el método de la ruta de destino, baseurl/res.render(). Aquí el método getter req.flash(type) devuelve el mensaje o los mensajes que coinciden con el tipo success, que se asignan a la variable de plantilla, expressFlash.

app.get('/', req, res) { 
    res.render('index', {expressFlash: req.flash('success') }); 
} 

Finalmente, mostrar el valor de expressFlash, si existe, en index.ejs.

<p> Express-Flash Demo </p>  
<% if (expressFlash.length > 0) { %> 
    <p>Message: <%= expressFlash %> </p> 
<% } %> 

Luego, inicie el servidor y visite baseurl/express-flash. Debería desencadenar una redirección a baseurl/ con el mensaje flash. Ahora actualice baseurl/ y vea desaparecer el mensaje.

+0

Para una explicación más completa, [Creé un Gist que incluye un archivo léame informativo sobre mensajes flash en Express 4] (https://gist.github.com/brianmacarthur/a4e3e0093d368aa8e423 "Dos enfoques para la mensajería instantánea en Express 4"). Incluye dos enfoques para la mensajería instantánea, uno que utiliza el módulo de sesión expresa solo, y el otro que usa el módulo de flash rápido.También incluye plantillas en ejs, manubrios y jade. –

+0

Gracias @Poison Oak después de horas ¡Me acabo de dar cuenta de que me faltaba el '=' en '<% ='! ¡Es por eso que mis mensajes siempre estaban vacíos! – nacho4d

Cuestiones relacionadas