Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

149
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda