Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
¿Cómo hacer CRUD en NodeJS pero con async y await?

Tengo que crear CRUD pero mi controlador usa muchas devoluciones de llamada. No sé cómo usar async y await para que mi código se vea limpio y de alto rendimiento. Espero que alguien pueda ayudarme y darme algunas sugerencias.

A continuación se muestra mi controlador:

 // create new course export function createCourse (req, res) { const course = new Course({ _id: mongoose.Types.ObjectId(), title: req.body.title, description: req.body.description, }); return course .save() .then((newCourse) => { return res.status(201).json({ success: true, message: 'New course created successfully', Course: newCourse, }); }) .catch((error) => { console.log(error); res.status(500).json({ success: false, message: 'Server error. Please try again.', error: error.message, }); }); } // Get all course export function getAllCourse( req, res){ Course.find() .select('_id title description') .then((allCourse) => { return res.status(200).json({ success: true, message: 'A list of all course', Course: allCourse, }); }) .catch((err) => { res.status(500).json({ success: false, message: 'Server error. Please try again.', error: err.message, }); }); } // get single course export function getSingleCourse(req, res) { const id = req.params.courseId; Course.findById(id) .then((singleCourse) => { res.status(200).json({ success: true, message: `More on ${singleCourse.title}`, Course: singleCourse, }); }) .catch((err) => { res.status(500).json({ success: false, message: 'This course does not exist', error: err.message, }); }); } // update course export function updateCourse(req, res) { const id = req.params.courseId; const updateObject = req.body; Course.update({ _id:id }, { $set:updateObject }) .exec() .then(() => { res.status(200).json({ success: true, message: 'Course is updated', updateCourse: updateObject, }); }) .catch((err) => { res.status(500).json({ success: false, message: 'Server error. Please try again.' }); }); } // delete a course export function deleteCourse(req, res) { const id = req.params.courseId; Course.findByIdAndRemove(id) .exec() .then(()=> res.status(204).json({ success: true, })) .catch((err) => res.status(500).json({ success: false, })); }

Ahora quiero reemplazar todas las devoluciones de llamada con async y await, cómo reemplazarlas y cómo usarlas de manera más correcta. Agradezco cada ayuda.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

// create new course export async function createCourse(req, res) { const course = new Course({ _id: mongoose.Types.ObjectId(), title: req.body.title, description: req.body.description, }); try { let newCourse = await course.save(); return res.status(201).json({ success: true, message: 'New course created successfully', Course: newCourse, }); } catch (error) { console.error(error); return res.status(500).json({ success: false, message: 'Server error. Please try again.', error: error.message, }); } } // Get all course export async function getAllCourse(req, res) { try { let allCourse = await Course.find().select('_id title description'); return res.status(200).json({ success: true, message: 'A list of all course', Course: allCourse, }); } catch (error) { return res.status(500).json({ success: false, message: 'Server error. Please try again.', error: error.message, }); } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Lo que está usando son promesas y se usan para evitar las devoluciones de llamadas. Es solo una forma de llamar a las devoluciones de llamada: cuando usa devoluciones de llamada, pasa la función cb al completar la tarea, por otro lado, promete devolver el objeto en el que adjunta las devoluciones de llamada, por lo que no hay infierno de devolución de llamada.

En la pregunta dada, ha utilizado el encadenamiento de cbs que también son buenos y async/await no es mágico, son solo azúcar sintáctico en Promises. Hacen que el código sea más legible y mantenible.

Tomemos un ejemplo para createCourse :

 export async function createCourse (req, res) { try { const course = new Course({ _id: mongoose.Types.ObjectId(), title: req.body.title, description: req.body.description, }); const course = await course.save() res.status(201).json({ success: true, message: 'New course created successfully', course, }) } catch (error) { console.log(error); res.status(500).json({ success: false, message: 'Server error. Please try again.', error: error.message, }); } }

Nota: siempre use try/catch con async/await

Puede seguir el mismo enfoque para todas las demás promesas. Te recomiendo que revises esto para más detalles.

about 4 years ago · Juan Pablo Isaza Denunciar

0

// Find all car with condition export async function findAllCar(req, res) { const { page, size, name, color, brand } = req.query; const { limit, offset } = getPagination(page, size); var condition = name && color && brand ? { name: { [Op.iLike]: `%${name}%` }, color: { [Op.iLike]: `%${color}%` }, brand: { [Op.iLike]: `%${brand}%` }, } : null; try { const car = await Car.findAll({ where: condition, offset, limit }); if (!car) { return res.status(404); } const response = getPagingData(data, page, limit); res.status(200).send(response); } catch (error) { return res.status(500).json({ success: false, message: "Server error. Please try again.", error: error.message, }); } } // Find single Car export async function findOne(req, res) { try { const car = await Car.findById(req.params.car_id); if (!car) { return res.status(404); } res.status(200).send(car); } catch (error) { return res.status(500).json({ success: false, message: "Server error. Please try again.", error: error.message, }); } } // update car export async function updateCar(req, res) { try { const car = await Car.find( req.body.name, req.body.brand, req.params.car_id, req.body ); if (!car) { return res.status(404).json({ success: false, message: "Duplicate value.", }); } res.status(200).json({ success: true, message: "New car updated successfully", }); } catch (error) { return res.status(500).json({ success: false, message: "Server error. Please try again.", error: error.message, }); } } // delete a car export async function deleteCar(req, res) { try { const car = await Car.findByIdAndDelete(req.params.car_id); if (!car) { return res.status(404).send(); } res.send(car); } catch (error) { return res.status(500).json({ success: false, message: "Server error. Please try again.", error: error.message, }); } }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda