Saltar al contenido

Node.js con Express: cómo redirigir una solicitud POST

No dejes de compartir nuestra página y códigos con otro, necesitamos tu ayuda para hacer crecer nuestra comunidad.

Solución:

Puedes hacerlo:

app.post('/', function(req, res) 
  res.redirect(307, '/test');
);

Lo que preservará el método de envío.

Como referencia, la especificación del código http 307 es:

307 Redirección temporal (desde HTTP/1.1) En esta ocasión, la solicitud debe repetirse con otra URI, pero las solicitudes futuras aún pueden usar la URI original.2 A diferencia de 303, la método de solicitud no debe cambiarse al volver a emitir la solicitud original. Por ejemplo, una solicitud POST debe repetirse utilizando otra solicitud POST.

Para obtener más información, consulte: http://www.alanflavell.org.uk/www/post-redirect.html

Tenga en cuenta la arquitectura de middleware: cada controlador puede manipular el contexto y responder o llamar next().

Según esta premisa, el enrutador express es básicamente una función de middleware que puede usar después de “corregir” la URL.

(Por cierto, la aplicación de solicitud también es una función, aunque no estoy seguro si recomiendo volver tan temprano en la cadena)

Aquí hay una especie de ejemplo:

const router = new require('express').Router()
const user = require('../model/user') 
//assume user implements:
//  user.byId(id) -> Promise
//  user.byMail(email) -> Promise

const reqUser = userPromise => (req, res, next) =>
   req.user
     ? next()
     : userPromise(req)
       .then(user =>  req.user = user )
       .then(next, next)
//assume the sever that uses this router has a 
//standard (err, req, res, next) handler in the end of the chain...

const byId = reqUser( req => user.byId(req.params.id) )
const byMail = reqUser( req => user.byMail(req.params.mail) )

router.post('/by-id/:id/friends',
  byId,
  (req, res) => res.render('user-friends', req.user)
)

router.post('/by-email/:email/friends',
  byMail,
  (req, res, next) => 
     req.url = `/by-id/$req.user.id/friends`
     next()
  , 
  router
)

La única diferencia entre 307 y 302 es que 307 garantiza que el método y el cuerpo no cambiarán cuando se realice la solicitud redirigida.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307

Reseñas y calificaciones

Si tienes algún recelo o capacidad de prosperar nuestro noticia eres capaz de ejecutar una crítica y con deseo lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *