Me veo obligado a hacer un proyecto "simple". El profesor quiere mongoDb y node js. Quiero obtener todos los autos de mi base de datos, pero find() no funciona. Mi modelo de código:
const mongoose = require('mongoose'); const CarSchema = mongoose.Schema({ mark:{ type: String, required: true,}, model:{ type: String, required: true,}, price:{ type: Number, required: true,}, available: { type: Boolean, required: true,}, pic_1:{ type:String, required:true, }, pic_2:{ type:String, required:true, } }) const Car = mongoose.model('Car', CarSchema) module.exports = CarRuta:
router.get('/getAll', (req, res) =>{ const cr=Car.find({}); console.log(cr); res.render('main', {user: req.user, cars:cr} ); });Console.log muestra todo pero no la lista de autos ;) Más estrictamente: muestra la estructura de la aplicación y los directores. ¿Como arreglarlo? Y cómo hacerlo sin =>{} - es muy ilegible, largo y me sangran los ojos. Solo quiero tomar todos los autos de db, asignarlos a la var y luego renderizar la vista con esos autos.
¡Hay muchas preguntas, pero ninguna respuesta resolvió mi problema! Saludos
Car.find() es una operación asíncrona.
Solución 1: usar async/await
router.get('/getAll', async (req, res) =>{ const cr = await Car.find({}); console.log(cr); res.render('main', {user: req.user, cars:cr} ); });Solución 2: usar la función de devolución de llamada
router.get('/getAll', (req, res) =>{ Car.find({}, (error, cars) => { console.log(cars); res.render('main', {user: req.user, cars: cars} ); }); });Si no desea utilizar las funciones de flecha, cambie como se muestra a continuación
() => {} > function() {}Cambios en su código
router.get('/getAll', async function(req, res) { const cr = await Car.find({}); console.log(cr); res.render('main', {user: req.user, cars:cr} ); });Referencia: