Este es el archivo de controladores de archivosPost. Aquí busco todos los datos de MongoDB y también presiono los datos allí. La función funciona muy bien sin iniciar sesión en la consola con la información de usuario, pero cuando intento iniciar sesión en la consola, aparece el error de que userInfo.toObject ({getters: true}) no es una función. Intenté usar JSON() pero obtuve el mismo error.
const { validationResult } = require("express-validator"); const HttpError = require("../models/http-error"); const File = require("../models/file"); const User = require("../models/user"); const getFilesByUserId = async (req, res, next) => { const userId = req.params.uid; let filePosts; try { filePosts = await File.find({ creator: userId }); } catch (err) { return next(new HttpError("Fetching failed, please try again.", 500)); } const userInfo = User.findById(userId); if (!filePosts || filePosts.length === 0) { return next( new HttpError("Could not find files for the provided user id.", 404) ); } console.log(userInfo.toObject({ getters: true })); res.json({ filePosts: filePosts.map((file) => file.toObject({ getters: true })), }); };En su función asíncrona, su código continúa aunque la llamada a User.findById(userId) no esté completa. Puede usar una declaración de await para asegurarse de que la función se haya ejecutado antes de que continúe su código.
Su código debería funcionar si cambia const userInfo = User.findById(userId); a
const userInfo = await User.findById(userId);Para obtener más información, aquí está la documentación de async/await: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
Solo necesitaba agregar await.
const userInfo = await User.findById(userId);