👓
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent
複数のリクエストを送信している。
このエラーが発生するときは、同じリクエストに対して複数回のレスポンスを送信している。そのため、1回のリクエストに対して1回だけレスポンスを返すようにして下さい。
僕のミス
usernameが見つからなかった場合に返すレスポンスに対してreturnをつけ忘れていました。それにより、複数のレスポンスがクライアント側に渡っていました。
exports.login = async (req, res) => {
const { username, password } = req.body;
try {
const user = await User.findOne({ username: username });
if (!user) {
- res.status(401).json
+ return res.status(401).json({
errors: [
{
param: "username",
msg: "ユーザー名が無効です。",
},
],
});
}
//verify passwords.
const descryptedPassword = CryptoJS.AES.decrypt(
user.password,
process.env.SECRET_KEY
).toString(CryptoJS.enc.Utf8);
if (descryptedPassword !== password) {
return res.status(401).json({
errors: [
{
param: "password",
msg: "パスワードが無効です。",
},
],
});
}
//published JWT
const token = jsonwebtoken.sign(
{ id: user._id },
process.env.TOKEN_SECRET_KEY,
{
expiresIn: "24h",
}
);
res.status(201).json({ user, token });
} catch (err) {
res.status(500).json(err);
}
};
Discussion