2011-08-16 14 views
12

En mi aplicación Node.js, tengo una función (enrutado por expreso), que presenta un formulario para el usuario:mensaje de error Pasando a la plantilla a través de redireccionamiento in exprés/Node.js

app.get('/register', function (req, res) { 
    res.render('form'); 
}); 

tengo otro función, enrutada a la misma URL, pero que maneja las solicitudes POST, que recibe los datos enviados por el formulario anterior. Si el formulario no valida, redirige al usuario de vuelta al formulario; de lo contrario, se hace lo que se debe hacer:

app.post('/register', function (req, res) { 
    if (validate(req.registerForm)) return res.redirect('back'); 
    persistStuff(req.registerForm, function (err, data) { 
    // Do error verification etc. 
    res.redirect('back') 
    }); 
}); 

Lo que quiero hacer es enviar un mensaje de error que se presentará, en la línea de:

if (validate(req.registerForm)) return res.redirect('back'); 

escribir algo como

if (validate(req.registerForm)) return res.render('form', {msg:'invalid'}); 

es inaceptable porque deseo seguir el patrón POST-REDIRECT-GET. Yo podría hacer algo como

if (validate(req.registerForm)) return res.redirect('/register?msg=invalid'); 

pero sería codificar una URL en mi código y preferiría evitar. ¿Hay alguna otra forma de hacerlo?

+0

http://stackoverflow.com/q uestions/5555053/how-to-validate-and-handle-a-form-in-express-nodejs/5558861 # comment16886850_5558861 – chovy

Respuesta

8

Necesita usar flash notifications, y está integrado en express.

va a añadir un mensaje así: req.flash("error", "Invalid form...");

usted necesitará un controlador dinámico para agregar los mensajes a su plantilla prestado, o puedes leer los TJ ha hecho para expreso. (express-messages)

+1

flash no funciona en el nodo 4.0 o con plantillas como bigote. – ingrid

3

Simplemente podría tenerlo como redirigir res.redirect('..?error=1')

el? la etiqueta le dice al navegador que es un conjunto de parámetros opcionales y que ... es solo un recuerdo relativo a la ruta (como llamar a cd .. en la terminal para retroceder un directorio) y su navegador lo dirigirá a la página correspondiente con ese identifique al final: http://.....?error=1

entonces simplemente puede tirar el error en la página correspondiente haciendo una:

if (req.param("error" == 1)) { // do stuff bassed off that error match };

se puede codificar en varios valores de error diferentes y tienen que responder de manera adecuada dependiendo de lo el error ocurrió

+0

Gracias por la alternativa, pero ¿por qué o cuándo sería mejor que usar notificaciones flash? – brandizzi

+1

¡Oh! Guau, no me di cuenta de que incluso se lo había sugerido al pie de la pregunta, no creo que realmente haya beneficios obvios; es un poco más fácil de implementar y los errores son un poco más visibles/rastreables ya que están en la URL pero deberían lograr lo mismo. Si su {hacer algo} es un poco más complicado que solo mostrar algo, es probable que sea un poco inseguro manejarlo de esta manera, ya que los usuarios pueden explotarlo escribiendo mensajes de error en la URL, pero por lo demás es más sencillo. – gadu

Cuestiones relacionadas