我正在构建节点/表达后端,并继续收到以下错误:(node:35061) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
。我不确定在这里我在做什么错...有人可以教育我这个问题是什么吗? TIA!
路线
userRoutes.post('', async (req, res) => {
try {
const { email, password } = req.body;
const validate = await signUp.validate({ email, password });
res.send(validate);
const newUser = new User({ email, password });
const sessionUser = sessionizeUser(newUser);
await newUser.save();
req.session.user = sessionUser;
res.send(sessionUser);
return;
} catch (error) {
res.status(400).send(parseError(error));
}
});
答案 0 :(得分:0)
问题出在这里try块
try {
const { email, password } = req.body;
const validate = await signUp.validate({ email, password });
res.send(validate); //over here
const newUser = new User({ email, password });
const sessionUser = sessionizeUser(newUser);
await newUser.save();
req.session.user = sessionUser;
res.send(sessionUser); //over here
return;
}
这意味着对于给定的客户端请求,服务器先前已将响应(具有请求资源的成功响应或针对错误请求的错误响应)发送回客户端,而现在却意外地尝试发送另一个响应
解决方案
此错误的简单解决方案是将javascript return语句添加到从if条件发送的响应中,以确保一旦将响应发送到,请求处理程序函数就使用该函数退出(终止)执行代码。客户。
The description for the return statement on MDN states
在函数体中使用return语句时,该函数的执行将停止。如果指定,则将给定值返回给函数调用者。