我有这个错误:错误[错误_HTTP_HEADERS_SENT]:发送到客户端后无法设置头。根据我的理解,问题是我试图向同一个http请求发送多个响应。我的直觉告诉我,是这部分搞砸了:
catch (err) {
res.status(400).json(err);
}
因为如果在数据库中没有找到用户/密码,我们已经发送了状态(400)。我说的对吗?更重要的是(这也是让我抓狂的地方),我正在跟踪一个YT tuto,他的代码和我的完全一样,但他的代码似乎没有任何问题。
我的代码:
const router = require("express").Router();
const User = require("../models/Users");
const bcrypt = require("bcrypt");
//LOGIN
router.post("/login", async (req, res) => {
try {
const user = await User.findOne({ username: req.body.username });
!user && res.status(400).json("Wrong credentials!");
const validated = await bcrypt.compare(req.body.password, user.password);
!validated && res.status(400).json("Wrong credentiaaaals!");
const { password, ...others } = user._doc;
res.status(200).json(others);
} catch (err) {
res.status(500).json(err);
}
});
module.exports = router;
他的代号:
//LOGIN
router.post("/login", async (req, res) => {
try {
const user = await User.findOne({ username: req.body.username });
!user && res.status(400).json("Wrong credentials!");
const validated = await bcrypt.compare(req.body.password, user.password);
!validated && res.status(400).json("Wrong credentials!");
const { password, ...others } = user._doc;
res.status(200).json(others);
} catch (err) {
res.status(500).json(err);
}
});
module.exports = router;
我做错什么了吗?我的React不好吗?谢谢!
1条答案
按热度按时间mqxuamgl1#
你是对的,你的代码试图多次向客户端发送数据。问题是在调用
.json("Wrong credentials!")
完成后,客户端的写流将关闭,你将无法向客户端发送任何其他数据。框架知道检测到它并向你显示bug。在您的代码中,在方法
.json("Wrong credentials!")
完成自己的执行后,程序将继续并尝试执行下面的行...您只需要添加
return
,这样程序将在向客户端发送响应后退出当前流。