No tengo mucha experiencia con async/await, pero incorporé las palabras clave en una función que básicamente obtiene o publica datos en la base de datos MongoDB. Parece que await no espera a que se cumpla la promesa y devuelve un objeto de respuesta indefinido .
Estoy teniendo el siguiente error:
res.error(404).json({mensaje: mensaje electrónico}) ^
TypeError: no se pueden leer las propiedades de undefined (leyendo 'error') en Object.getAllItems (/Users/myName/Desktop/TODOList/backend/Controllers/ItemsConroller.js:12:13)
Aquí está mi código:
ItemsController.js:
const getAllItems = async (req, res) => { try{ const items = await Item.find({}) res.status(200).json(items) } catch(e){ res.error(404).json({message: e.message}) } }Archivo servidor.js:
app.get('/todos', (req, res) => { dbItem.getAllItems().then(data => { console.log("entered") res.send(data); }) })El mismo problema con otras funciones en el archivo del controlador que incorpora palabras clave await/async.
Gracias.
No está pasando su objeto req y res a su punto final /todos : para hacer que su aplicación sea más sólida, intente esto:
Puede usar getAllItems como su middleware de esta manera
app.get('/todos', dbItem.getAllItems, (req, res) => { if(!req.error){ res.send(req.items) }else{ res.send(req.error) } }) Y adjunte sus variables al objeto req y páselas a /todos
const getAllItems = async (req, res, next) => { try{ const items = await Item.find({}) req.items = items next() } catch(e){ req.error = e.message next() } }