我正在嘗試使用電子郵件和密碼登錄,但如果我使用正確的資料登錄,那就沒問題了。如果我輸入任何一個欄位錯誤,那么它會顯示預期的輸出并立即崩潰,我必須從 npm start 重新啟動服務器。如果我不重新啟動服務器,則無法進行進一步的 API 呼叫。
用戶路線:
// Login
router.post('/login', async (req, res) => {
try {
const user = await User.findOne({
email: req.body.email,
});
!user && res.status(401).json('email does not exist in the DB');
const bytes = CryptoJS.AES.decrypt(
user.password,
process.env.SECRET_KEY
);
const originalPassword = bytes.toString(CryptoJS.enc.Utf8);
originalPassword !== req.body.password &&
res.status(401).json('wrong password');
const accessToken = jwt.sign(
{
id: user._id,
},
process.env.SECRET_KEY,
{ expiresIn: '300000' }
);
const { password, ...info } = user._doc;
res.status(200).json({ ...info, accessToken });
} catch (err) {
res.status(500).json(err);
}
});
uj5u.com熱心網友回復:
res.json當您打算提前退出函式時,向您的呼叫添加 return 陳述句。否則,您的其余代碼將繼續執行并拋出錯誤,因為回應已經發送。
您的代碼拋出錯誤,因為您的回應被多次發送。然后,您的捕獲正在嘗試發送另一個回應,這會引發另一個錯誤。
uj5u.com熱心網友回復:
當您輸入錯誤的憑據時,執行將繼續到以下行
!user && res.status(401).json('email does not exist in the DB');
要停止執行處理程式,請將此行更改為:
if(!user) { res.status(401).json('email does not exist in the DB'); return;}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322880.html
