route node another node.js express post get

node.js - node - npm express



Redirecciona POST a POST usando rutas Express JS (1)

Entonces tengo una página de inicio (''/''). En esta página hay un formulario de inicio de sesión para un nombre de usuario y contraseña con un botón de enviar. Tengo la aplicación.get que carga la página y una aplicación.post para recibir los parámetros del formulario. Sin embargo, mi intención es tener una app.post (''/ login'', función (req, res) {// lógica}); No hay / ruta de inicio de sesión o página para cargar, esto simplemente albergaría la lógica para el inicio de sesión (validación del nombre de usuario, etc.) ¿Hay una manera fácil de obtener la publicación de ''/'' para redirigir a la publicación de / inicie sesión sin que intente cargar la página / login, que no existe?


No estoy seguro si entiendo tu pregunta correctamente. Según tengo entendido, quiere que su solicitud POST sea redirigida a solicitudes POST para /login que puede ser complicado.

Por lo general, se redirigen enviando ya sea 301 Moved Permanently o 302 Find HTTP status code. Ambos trabajan generalmente en la práctica como si fuera 303 Ver Otro y se realiza una solicitud GET. Ver la lista de códigos de estado HTTP en Wikipedia:

Este es un ejemplo de práctica industrial que contradice el estándar. La especificación HTTP / 1.0 (RFC 1945) requería que el cliente realizara una redirección temporal (la frase descriptiva original era "Movida temporalmente"), pero los navegadores populares implementaron 302 con la funcionalidad de un 303 Ver Otro. Por lo tanto, HTTP / 1.1 agregó códigos de estado 303 y 307 para distinguir entre los dos comportamientos. Sin embargo, algunas aplicaciones web y marcos usan el código de estado 302 como si fuera el 303.

Hay un redireccionamiento temporal 307 (desde HTTP / 1.1) creado para solucionar este problema que no permite cambiar el método HTTP, por lo que una redirección de POST debe seguir siendo POST. Ver Wikipedia:

En este caso, la solicitud debe repetirse con otro URI; sin embargo, las solicitudes futuras aún deberían usar el URI original. A diferencia de cómo se implementó históricamente el 302, no se permite cambiar el método de solicitud al volver a emitir la solicitud original. Por ejemplo, una solicitud POST debe repetirse utilizando otra solicitud POST.

Por lo que sé, los navegadores deberían advertir a los usuarios antes de seguir tales redireccionamientos. No sé cómo funciona eso en la práctica. No confiaría en eso, ya que puede ser molesto para los usuarios en el mejor de los casos o incluso no funcionar en absoluto.

Mi sugerencia sería cambiar esto:

app.post(''/login'', function (req, res) { // logic });

a esto:

function loginHandler(req, res) { // logic } app.post(''/login'', loginHandler); app.post(''/'', loginHandler);

o algo así, usando expresiones regulares:

app.post(/^//(?:login)?$/, function (req, res) { // logic });

De esta forma, en lugar de una redirección, se usará el mismo controlador para ambas rutas. Sería más rápido y más robusto porque de esa manera no dependería de que la redirección funcionara como quisiera, no hay redirección.