Express.JS 中的这行代码是什么意思: !user && res.status(401).json("Wrong credentials!");它造成的错误是什么意思?

What does this line of code in Express.JS mean: !user && res.status(401).json("Wrong credentials!"); and what does the error it creates mean?

我正在学习快速教程并遇到了这个

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);
  }
});

我不明白的台词是

!user && res.status(401).json("Wrong credentials!");

我认为这是编写 if 语句的一种简短方式,但我不太确定。这也是 javascript 的事情吗?一个 NodeJs 的东西?还是快递的东西?以前没见过...

还有,如果是if语句,那行执行的时候会发生什么?代码“return”是不会继续,还是会继续。因为我故意写错用户名或密码时出现错误:

节点:internal/errors:464 ErrorCaptureStackTrace(错误); ^

错误[ERR_HTTP_HEADERS_SENT]:发送给客户端后无法设置headers 在新的 NodeError(节点:internal/errors:371:5) 在 ServerResponse.setHeader(节点:_http_outgoing:576:11) 在 ServerResponse.header(C:\CENSORED_NodeJS_Tutorial3\node_modules\express\lib\response.js:776:10) 在 ServerResponse.send(C:\CENSORED_NodeJS_Tutorial3\node_modules\express\lib\response.js:170:12) 在 ServerResponse.json(C:\CENSORED_NodeJS_Tutorial3\node_modules\express\lib\response.js:267:15) 在 C:\CENSORED_NodeJS_Tutorial3\routes\auth.js:36:21 在 processTicksAndRejections(节点:internal/process/task_queues:96:5){ 代码:'ERR_HTTP_HEADERS_SENT' } [nodemon] 应用程序崩溃 - 在启动之前等待文件更改...

根据初学者的知识,我猜这是因为代码在遇到这些行后没有停止,但我不知道如何修复它,请帮忙!

编辑:这是我的包裹:

const router = require("express").Router();
const User = require("../models/User");
const CryptoJS = require("crypto-js");

这是一行代码,来自那些认为自己很狡猾或可爱的人,以(极大)牺牲易读性为代价。我强烈建议不要做这种事情。

req.body.password !== originalPassword && res.status(401).json("Wrong credentials!");

检查 req.body.password !== originalPassword 是否为真 - 如果是,则继续评估 right-hand 方:

res.status(401).json("Wrong credentials!");

更好的写法是:

if (req.body.password !== originalPassword) {
  res.status(401).json("Wrong credentials!");
}

最好在那里终止路由,而不是继续,即使凭据错误也是如此:

if (req.body.password !== originalPassword) {
  res.status(401).json("Wrong credentials!");
  return;
}

Will the code "return" and not continue, or will it keep going.

它将继续进行 - 在这种情况下,这是不可取的。应插入一个 return,以便在凭据错误时它不会继续。