如何解决删除帐户后将用户重定向到主页 - express、mongo、axios
如果我想先删除用户而不是与该用户关联的会话,我想知道下面的代码是否正确?另外,我试图在删除后将用户重定向到主页,但是如果我添加 res.redirect("/") 它说我无法设置标题:
(node:2852) UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头
router.delete("/",isLoggedIn,(req,res,next) => {
console.log("DELETETETING USER",req.user.id);
User.findByIdAndDelete(req.user.id)
.then(() => {
Session.findByIdAndDelete(req.headers.authorization)
.then(() => {
res.status(200).json({ message: "User and session was deleted" });
})
.catch((err) => {
console.log(err);
res.status(500).json({ errorMessage: err.message });
});
})
.catch((err) => {
console.log(err);
res.status(500).json({ errorMessage: err.message });
});
});
在站点标题中,我正在显示用户数据,但在删除帐户后,用户名仍然可见。我将用户作为道具从主应用程序状态传递到站点标题。
谢谢
解决方法
一个 HTTP 请求只能有一个响应。对请求做出一次响应后,您将无法发送第二次响应。
要重定向用户,您需要向 HTTP 请求发送 30x 响应。但是在您的代码中,您已经通过此行发送了 200(成功响应):
res.status(200).json({ message: "User and session was deleted" });
这就是您收到此错误的原因:
(node:2852) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
要解决这个问题,您要么需要用这样的重定向替换“成功”响应:
router.delete("/",isLoggedIn,(req,res,next) => {
console.log("DELETETETING USER",req.user.id);
User.findByIdAndDelete(req.user.id)
.then(() => {
Session.findByIdAndDelete(req.headers.authorization)
.then(() => {
res.redirect("/");
})
.catch((err) => {
console.log(err);
res.status(500).json({ errorMessage: err.message });
});
})
.catch((err) => {
console.log(err);
res.status(500).json({ errorMessage: err.message });
});
});
或者,您可以保持后端代码原样,并通过一些Javascript逻辑在前端实现重定向。
在您的情况下,我会将 res.status(200).json({ message: "User and session was deleted" });
替换为 res.redirect("/");
,因为“成功”响应似乎是多余的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。