在我传递无效登录名/密码后,数据库断开连接



我有两条路线:

router.post("/register", async (req, res) => {
try {
const salt = await bcrypt.genSalt(10);
const hashedPass = await bcrypt.hash(req.body.password, salt);
const newUser = new User({
login: req.body.login,
password: hashedPass,
registrationDate: new Date(),
});
const user = await newUser.save();
res.status(200).json(user);
} catch (err) {
res.status(500).json(err);
}
});
router.post("/login", async (req, res) => {
try {
const user = await User.findOne({ login: req.body.login });
!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);
}
});

他们俩工作都很棒。但是login有一个问题。当我传递错误的登录名或错误的密码时,会出现error 400,并返回Wrong credentials。但在这之后,数据库立即断开连接,并出现错误:

node:internal/errors:464
ErrorCaptureStackTrace(err);
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:371:5)
at ServerResponse.setHeader (node:_http_outgoing:576:11)
at ServerResponse.header (D:aPSW PROJEKTprojekt-pswProjekt-Instagrambackendnode_modulesexpresslibresponse.js:771:10)
at ServerResponse.send (D:aPSW PROJEKTprojekt-pswProjekt-Instagrambackendnode_modulesexpresslibresponse.js:170:12)
at ServerResponse.json (D:aPSW PROJEKTprojekt-pswProjekt-Instagrambackendnode_modulesexpresslibresponse.js:267:15)
at D:aPSW PROJEKTprojekt-pswProjekt-Instagrambackendroutesusers.js:54:21 {
code: 'ERR_HTTP_HEADERS_SENT'
}

有人知道吗,我该怎么做才能使数据库不会断开连接?

我将此代码更改为:

router.post("/login", async (req, res) => {
try {
const user = await User.findOne({ login: req.body.login });
if (!user) {
return res.status(400).send({ error: [{ msg: "bad credentials" }] });
}
const validated = await bcrypt.compare(req.body.password, user.password);
if (!validated) {
return res.status(400).send({ error: [{ msg: "bad credentials" }] });
}
const { password, ...others } = user._doc;
return res.status(200).send(user);
} catch (err) {
return res.send(error);
}
});

现在一切都正常了。

最新更新