這個問題在這里已經有了答案: 什么是“x && foo()”? (5 個回答) 13 小時前關閉。
我正在關注一個快速教程并遇到了這個
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 陳述句,那么執行該行時會發生什么?代碼會“回傳”而不繼續,還是會繼續運行。因為故意寫錯誤的用戶名或密碼時出現錯誤:
節點:內部/錯誤:464 ErrorCaptureStackTrace(錯誤);^
錯誤 [ERR_HTTP_HEADERS_SENT]:在 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 (node:internal/process/task_queues:96:5) { code: 'ERR_HTTP_HEADERS_SENT' [nodemon] 應用程式崩潰 - 在啟動前等待檔案更改...
憑借任何初學者的知識,我猜這是因為代碼在遇到這些行后沒有停止,但我不知道如何修復它,請幫忙!
編輯:這是我的包裹:
const router = require("express").Router();
const User = require("../models/User");
const CryptoJS = require("crypto-js");
uj5u.com熱心網友回復:
這是一個認為自己很狡猾或可愛的人的代碼行,但以(極大)易讀性為代價。我強烈建議不要做這種事情。
req.body.password !== originalPassword && res.status(401).json("Wrong credentials!");
檢查是否req.body.password !== originalPassword為真 - 如果是,則繼續評估右側:
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;
}
代碼會“回傳”而不繼續,還是會繼續運行。
它會繼續下去——在這種情況下,這是不可取的。應該插入A return,以便在憑據錯誤時它不會繼續運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/428874.html
標籤:javascript 节点.js 表示 服务器
