Estoy siguiendo un tutorial express y encontré esto
router.post("/login", async (req, res) => { try { const user = await User.findOne({ username: req.body.username }); !user && res.status(401).json("Wrong credentials!"); const hashedPassword = CryptoJS.AES.decrypt(user.password, process.env.PASS_SEC); const originalPassword = hashedPassword.toString(CryptoJS.enc.Utf8); req.body.password !== originalPassword && res.status(401).json("Wrong credentials!"); const { password, ...others } = user._doc; res.status(200).json(others); } catch (err) { res.status(500).json(err); } });Las lineas que no entiendo son
!user && res.status(401).json("Wrong credentials!");Supongo que es una forma abreviada de escribir una declaración if, sin embargo, no estoy tan seguro. ¿También es esto una cosa de javascript? una cosa de NodeJs? o una cosa Express? nunca lo habia visto antes...
Además, si es una instrucción if, ¿qué sucede cuando se ejecuta la línea? ¿El código "regresará" y no continuará, o continuará? Porque recibo un error cuando escribo intencionalmente el nombre de usuario o la contraseña incorrectos:
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 (C:\ CENSORED_NodeJS_Tutorial3\node_modules\express\lib\response.js:776:10) en ServerResponse.send (C:\CENSORED_NodeJS_Tutorial3\node_modules\express\lib\response.js:170:12) en ServerResponse.json (C:\CENSORED_NodeJS_Tutorial3\ node_modules\express\lib\response.js:267:15) en C:\CENSORED_NodeJS_Tutorial3\routes\auth.js:36:21 en processTicksAndRejections (node:internal/process/task_queues:96:5) { código: 'ERR_HTTP_HEADERS_SENT' } La aplicación [nodemon] se bloqueó: esperando cambios en el archivo antes de comenzar...
Con mi conocimiento de principiante, supongo que se debe a que el código no se detiene después de presionar esas líneas, pero no tengo idea de cómo solucionarlo, ¡ayuda por favor!
EDITAR: aquí están mis paquetes:
const router = require("express").Router(); const User = require("../models/User"); const CryptoJS = require("crypto-js");Es una línea de código de alguien que pensó que estaba siendo engañoso o lindo, a expensas (grandes) de la legibilidad. Recomiendo encarecidamente no hacer este tipo de cosas.
req.body.password !== originalPassword && res.status(401).json("Wrong credentials!"); comprueba si req.body.password !== originalPassword es veraz; si lo es, procede a evaluar el lado derecho:
res.status(401).json("Wrong credentials!");Una mejor manera de escribir esto sería:
if (req.body.password !== originalPassword) { res.status(401).json("Wrong credentials!"); }También sería bueno terminar la ruta allí , en lugar de continuar incluso si las credenciales son incorrectas:
if (req.body.password !== originalPassword) { res.status(401).json("Wrong credentials!"); return; }¿El código "regresará" y no continuará, o continuará?
Continuará, lo que, en este caso, no sería deseable. Se debe insertar un return para que no continúe si las credenciales son incorrectas.