¿Cómo redirigir a la URL generada con ExpressJS?

En este artículo, le muestro cómo redirigir a los usuarios usando ExpressJS. En primer lugar, ¿cuándo quieres redirigir al usuario? Aquí hay algunos escenarios reales.

Por ejemplo, cuando el usuario inicia sesión correctamente, puede redirigirlo al tablero. En otro caso, cuando el usuario solicita restablecer la contraseña, generalmente generamos una URL con el hash de la contraseña anterior del usuario y la enviamos al correo electrónico del usuario. Aquí, le muestro cómo redirigir al usuario al panel después de iniciar sesión correctamente.

Visión general:

Cliente: Realice una solicitud GET en la URL ‘/’ para la página de inicio de sesión.
Servidor: Procesar página de inicio de sesión
Cliente: A continuación, el usuario completa los datos del formulario y realiza una solicitud POST en la URL ‘/login’ .
Servidor: si los datos del usuario coinciden, redirija a ‘/dashboaard/[ CORREO ELECTRÓNICO DEL USUARIO ]’.
Cliente: el usuario realiza una solicitud GET  en ‘/dashboaard/[ CORREO ELECTRÓNICO DEL USUARIO ]’ .
Servidor: renderizar la página del tablero.

Estructura del proyecto: la estructura final del directorio del proyecto se verá así.

Project
|
|-> node_modules
|-> views
  |-> login.ejs
  |-> dashboard.ejs
|-> package.json
|-> package-lock.json
|-> server.js

Paso 1: Cree una carpeta de proyecto npm vacía y asígnele el nombre Project .

mkdir Project
cd Project 
npm init -y

Paso 2: Instalar requiere dependencia.

Requerir dependencia:

  1. ExpressJS
  2. EJS
  3. analizador de cuerpo
npm i express ejs body-parser

Paso 3: archivos de cliente, el comportamiento predeterminado de EJS es que busca en la carpeta ‘vistas’ las plantillas para representar. Entonces, hagamos una carpeta de ‘vistas’ en nuestra carpeta de proyecto de Node principal y hagamos dos archivos llamados » login.ejs » y » dashboard.ejs «.

login.js es responsable de la solicitud de inicio de sesión del usuario y, si el inicio de sesión es exitoso, el usuario lo redirigirá a dashboard.ejs .

login.ejs

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body{
            margin: 0% auto;
        }
        h1{
            color: green;
        }
        input{
            margin: 10px;
            display: block;
            padding: 5px 10px;
        }
        button{
            margin: 10px;
            display: block;
            padding: 5px 10px;
            cursor: pointer;
            background-color: green;
            border: none;
            color: white;
            font-weight: bold;            
        }
        form{
            margin: 10% auto;
            padding: 20px;
            width: 20%;
            border: 1px solid green;
        }
    </style>
</head>
<body>
    <form>
        <center><h1>GeeksForGeeks</h1></center>
  
        <label>Email</label>
        <input type="email" id="userEmail">
  
        <label>Password</label>
        <input type="password" id="userPassword">
  
        <button onClick = "login(event)"> Login </button>
    </form>
  
    <script>
        const login = e =>{
            e.preventDefault();
  
            const email = document.getElementById('userEmail').value;
            const password = document.getElementById('userPassword').value;
  
            const option = {
                headers:{
                    "Content-Type": "application/json"
                },
                method: "POST",
                body: JSON.stringify({
                    email: email,
                    password: password
                }),
                redirect: "follow"
            }    
              
            // fetching data
            fetch(`<%= url %>`, option)
                .then(res => res.redirected && ( location.href = res.url ))
                .catch(err => alert('Something happen wrong!'));
        }
    </script>
</body>
</html>

dashboard.ejs

<!DOCTYPE html>
<html>
<head>
    <title>Dashboard</title>
</head>
<body>
    <h1>Welcome <%= email %></h1>
</body>
</html>

Paso 4: Cree un nombre de archivo server.js en su carpeta raíz. Este archivo tiene algún middleware y responde a la solicitud del usuario. Por lo general, la información de inicio de sesión del usuario se obtiene de la base de datos, pero en nuestro caso es justo obtenerla de una base de datos damy. 

Aquí, la ruta del controlador de inicio de sesión se redirige a ‘/dashboaard/[ CORREO ELECTRÓNICO DEL USUARIO ]’ si los datos del usuario coinciden con la respuesta con el código de error de cliente HTTP 401.  

server.js

const express = require('express');
const path = require('path');    
const bodyParser = require('body-parser'); 
const ejs = require('ejs');
  
const app = express();
const PORT = 3000;
  
app.set('view engine', 'ejs');
app.use(bodyParser.json());
  
//login page route
app.get('/', (req,res)=>{
    res.render(path.join(__dirname, 'views/login.ejs'), {url: '/login'});
})
  
// login handler route
app.post('/login', (req,res)=>{
    const {email, password} = req.body;
      
    findUser(email, password) ?
        // if user is registered
        // generate a dynamic url
        // redirect to user
        res.redirect(301, `/dashboard/${email}`) :
        res.status(401).end();
  
});
  
// dashboard route
app.get('/dashboard/:email', (req, res)=>{
    const {email} = req.params;
    res.render(path.join(__dirname, 'views/dashboard.ejs'), {email: email})
});
  
// damy user db
const users = [
    {
        name: "Raktim Banerjee",
        email: "raktim@email.com",
        password: "Raktim"
    },
    {
        name: "Arpita Banerjee",
        email: "arpita@email.com",
        password :"Arpita"
    }
];
  
// find user 
const findUser = (email, password)=> users.some(user => 
      user.email === email && user.password === password 
)
  
// Start the server
app.listen(PORT, err =>{
    err ? 
    console.log("Error in server setup") :
    console.log("Server listening on Port", PORT)
});

Paso 5: Inicie el servidor.

node server.js

Producción:

Publicación traducida automáticamente

Artículo escrito por braktim99 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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