Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

116
Views
Sistema de me gusta/no me gusta con MongoDb

Estoy trabajando en un sistema de me gusta/no me gusta en una API que funciona con mongoDB y nodejs y se supone que el usuario puede realizar estas acciones:

  • Me gusta la salsa una vez (me gusta = 1) y agregue la identificación del usuario en una matriz "usersLiked"
  • Cancele su me gusta (like = 0) y elimine la identificación de usuario de la matriz "usersLiked"
  • No me gusta la salsa una vez (me gusta = -1) y agregue la identificación del usuario en una matriz "usuariosNo me gustaron"
  • Cancele su disgusto (me gusta = 0) y supuestamente eliminó la identificación del usuario de la matriz "usersDisliked"

La lógica del sistema me gusta/no me gusta

Logré que al usuario le gustara la salsa, cancelara su me gusta y no le gustara la salsa.

Pero estoy completamente bloqueado en la cancelación de No me gusta porque cuando intento usar nuevamente el método updateOne en la condición en la que tenemos que cancelar Me gusta / No me gusta, tengo este error:

No se pueden establecer encabezados después de que se envían al cliente

¿Cómo podría mejorar el código?

Estoy aprendiendo poco a poco a usar los comandos del backend y aquí estoy frente a una pared.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El error que está recibiendo: Cannot set headers after they are sent to the client , se debe a que está intentando enviar dos respuestas HTTP para la misma solicitud, en este bloque:

 if(likeStatus === 0) { Sauces.updateOne({_id: req.params.id}, {$inc:{likes:-1}, $pull: {usersLiked:userIdentifiant}}) .then(() => res.status(201).json({message: "Like has been canceled"})) .catch(error => res.status(400).json(error)) Sauces.updateOne({_id: req.params.id}, {$inc:{dislikes:+1}, $pull: {usersDisliked:userIdentifiant}}) .then(() => res.status(201).json({message: "Dislike has been canceled"})) .catch(error => res.status(400).json(error)) }

Debe esperar a que se completen las operaciones de actualización y luego enviar una única respuesta. Por ejemplo, puedes encadenar las promesas así:

 if (likeStatus === 0) { Sauces.updateOne({ _id: req.params.id }, { $inc: { likes: -1 }, $pull: { usersLiked: userIdentifiant } }) .then(() => { return Sauces.updateOne( { _id: req.params.id }, { $inc: { dislikes: +1 }, $pull: { usersDisliked: userIdentifiant } } ); }) .then(() => { res.status(201).json({ message: ['Like has been canceled', 'Dislike has been canceled'] }); }) .catch((error) => res.status(400).json(error)); }

o incluso mejor ejecútelos en paralelo usando Promise.all()

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!