删除帐户后将用户重定向到主页 - express, mongo, axios
Redirect user to the home page after deleting an account - express, mongo, axios
我想知道如果我想先删除与该用户关联的 session 用户,下面的代码是否正确?另外,我试图在删除后将用户重定向到主页,但是如果我添加 res.redirect("/") 它说我无法设置 headers:
(node:2852) UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置 headers
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 });
});
});
在站点 header 中,我正在显示用户数据,但在我删除帐户后,用户名仍然可见。我将用户作为道具从主应用程序状态传递到站点header。
谢谢
一个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("/");
,因为“成功”响应似乎是多余的。
我想知道如果我想先删除与该用户关联的 session 用户,下面的代码是否正确?另外,我试图在删除后将用户重定向到主页,但是如果我添加 res.redirect("/") 它说我无法设置 headers:
(node:2852) UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置 headers
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 });
});
});
在站点 header 中,我正在显示用户数据,但在我删除帐户后,用户名仍然可见。我将用户作为道具从主应用程序状态传递到站点header。
谢谢
一个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("/");
,因为“成功”响应似乎是多余的。