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

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

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