Esta es la solicitud de publicación que intenté crear para iniciar sesión
enrutador.post('/iniciar sesión', asíncrono(requerido, res) =>{
const user = await User.findOne({gmail: req.body.gmail}) !user && res.status(404).json("user not matched") const p = await bcrypt.compare(req.body.password, user.password) !p && res.status(400).json("password not matched") res.status(200).json(user) })
Cuando hago clic en el botón enviar en cartero, recibo esta respuesta con el siguiente error: ingrese la descripción de la imagen aquí
Este es el error que recibo cuando "envío" una solicitud de publicación en cartero:
::1 - - [19/ene/2022:11:48:06 +0000] "POST /api/auth/login HTTP/1.1" 200 22 nodo:interno/errores:464 ErrorCaptureStackTrace(err); ^
Error [ERR_HTTP_HEADERS_SENT]: no se pueden establecer encabezados después de enviarlos al cliente en el nuevo NodeError (node:internal/errors:371:5) en ServerResponse.setHeader (node:_http_outgoing:576:11) en ServerResponse.header (D:\ Projects\social\node_modules\express\lib\response.js:776:10) en ServerResponse.send (D:\Projects\social\node_modules\express\lib\response.js:170:12) en ServerResponse.json (D :\Projects\social\node_modules\express\lib\response.js:267:15) en D:\Projects\social\routes\auth.js:28:21 { código: 'ERR_HTTP_HEADERS_SENT' } [nodemon] aplicación bloqueada - esperando cambios en el archivo antes de comenzar...
después de hacer clic en el botón "enviar" por segunda vez, la respuesta muestra esto ingrese la descripción de la imagen aquí
¿Qué hice mal aquí?
Este es un error muy común y se propaga a través de Internet. Estás intentando enviar 2 respuestas. Cuando su verificación en la línea 5 tiene éxito, envía una respuesta, luego su código continúa y llega a la línea 7 donde también está enviando una respuesta. Simplemente envuélvalos dentro de un bloque if-else para evitar múltiples respuestas.