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.

Mostrar datos de usuario de Mongo en archivo EJS con node/express

Estoy ejecutando node/express/mongoose/mongo y estoy intentando mostrar la información de un usuario registrado en su página de cuenta.

En mi archivo controlador de usuario, estoy intentando acceder a su ID de usuario de Mongo para luego buscar el objeto completo del usuario, cargar ese objeto en una constante y pasar ese objeto a la renderización de un archivo EJS.

const User = require('../models/user');

module.exports.account = async (req, res) => {
    const userID = req.user._id;
    const { user } = await User.findById(userID);
    res.render('app/account', { user });
}

Cuando imprimo userID en la consola, obtengo “new ObjectId(“61d321284256dffb7e869e8f”)” (¿no debería obtener simplemente la cadena de números?).
Cuando imprimo user.email al codificar manualmente findByID('61d321284256dffb7e869e8f'), obtengo el error “TypeError: No se pueden leer las propiedades de indefinido”.

Realmente estoy perdido en este tema, así que agradezco cualquier ayuda aquí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Parece que podría haber un problema con la forma en que estás accediendo a la información del usuario en el modelo User. Aquí hay algunas cosas que puedes intentar:

    1. Asegúrate de que el ID de usuario que estás obteniendo es una cadena válida o un ID de objeto. Puedes usar el método toString() para convertirlo en una cadena:
      const userID = req.user._id.toString();
      
    2. Cuando estés obteniendo la información del usuario de la base de datos, deberías usar el método findOne() en lugar de findById():
      const user = await User.findOne({_id: userID});
      

      Esto devolverá un objeto de usuario que puedes pasar a tu archivo EJS.

    3. Al pasar datos al archivo EJS, asegúrate de que los nombres de las variables sean correctos. Estás pasando { user }, lo que significa que el nombre de la variable en tu archivo EJS debería ser user. Asegúrate de estar utilizando el nombre de variable correcto en tu código de plantilla.

    Esperamos que una de estas sugerencias te ayude a resolver el problema. ¡Buena suerte!

Comments are closed.