es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo encontrar elementos de una matriz en npm?

Estoy tratando de encontrar el usuario con el correo electrónico y la contraseña ingresados ​​a partir de esta matriz ficticia de usuarios, pero obtengo “indefinido” en el valor de retorno y, por lo tanto, no puedo iniciar sesión. Si ejecuto este código en la consola, obtengo la salida correcta. ¿Alguien puede ayudar con por qué esta función find (en la solicitud post) no funciona en Node?

Array ficticia:

const users = [
{ id: 1, name: ‘Sherry’, email:’sherry@gmail.com’, password: 1234 },
{ id: 2, name: ‘harry’, email:’harry@gmail.com’, password: 1234 },
{ id: 3, name: ‘cherry’, email:’cherry@gmail.com’, password: 1234 }
]

Solicitud GET:

app.get(‘/login’, (req, res) => {
res.send(<form method='POST' action='/login'>
<input type="email" name="email" placeholder="Ingrese correo electrónico">
<input type="password" name="password" placeholder="Ingrese contraseña">
<input type="submit">
</form>
);
})

Solicitud POST:

app.post(‘/login’, (req,res) => {
const { email, password } = req.body;
console.log(email)
console.log(password)
console.log(users)
let user1 = users.find((user) => user.email === email && user.password === password);
console.log(user1);

    if(user1) {
            req.session.userId = user.id
            return res.redirect('/home')
    }

    res.redirect('/')
})

Problema: User1 es “indefinido”.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Podría haber varias razones por las que user1 no está definido:

    1. Verifique si req.body se está analizando correctamente por el middleware. Asegúrese de incluir el siguiente middleware para analizar el cuerpo de la solicitud:
      app.use(express.urlencoded({ extended: true }));
      

      Alternativamente, también puede usar el paquete body-parser.

    2. Verifique si los valores de correo electrónico y contraseña son correctos y coinciden con alguno de los objetos de usuario en el arreglo users.

      Puede agregar un registro de consola dentro de la función find para verificar si realmente está encontrando al usuario correcto:

      let user1 = users.find((user) => {
         console.log(user.email, email, user.password, password);
         return user.email === email && user.password === password;
      });
      

    3. Verifique si hay algún carácter de espacio en blanco o diferencias de mayúsculas y minúsculas que estén causando la comparación fallida.

      Puede usar el método trim() para eliminar cualquier carácter de espacio en blanco al principio o al final de los valores de correo electrónico y contraseña:

      const { email, password } = req.body;
      let user1 = users.find((user) => user.email.trim() === email.trim() && user.password === password.trim());
      

      También puede usar una comparación que no distinga entre mayúsculas y minúsculas convirtiendo ambas cadenas a minúsculas:

      let user1 = users.find((user) => user.email.toLowerCase() === email.toLowerCase() && user.password === password);
      

      Asegúrese de cambiar también los campos de entrada de correo electrónico y contraseña en el formulario de inicio de sesión a minúsculas en este caso.

Comments are closed.