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
,以便在凭据错误时它不会继续。
我正在学习快速教程并遇到了这个
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
,以便在凭据错误时它不会继续。