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

118
Vistas
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 Respuestas
Responde la pregunta

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 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