javascript - 删除请求导致节点服务器冻结
问题描述
所以我有一个迷你快递应用程序,用户可以在其中注册、登录和删除他们的帐户。由于 html 不支持 DELETE,我使用了 npm 包 methodOverride。
这就是我的表单和 express-override 中间件的样子:
服务器.js
// Method override
app.use(
methodOverride(function (req, res) {
if (req.body && typeof req.body === 'object' && '_method' in req.body) {
let method = req.body._method;
delete req.body._method;
return method;
}
})
索引.hbs
<form action="/profile/delete/{{_id}}" method="POST" class="pt-2">
<label for="delete-input_confirmation"></label>
<input type="hidden" name="_method" value="DELETE">
<button type="submit" class="btn delete-confirm">Confirm</button>
</form>
现在在我的 users.js 中删除请求:
router.delete('/profile/delete/:id', ensureAuth, async (req, res) => {
try {
let userId = await LocalUser.findById(req.params.id);
if (!userId) {
return res.render('/');
} else {
await LocalUser.findOneAndRemove({ _id: req.params.id });
res.redirect('/register');
console.log(userId);
}
} catch (err) {
console.error(err);
return res.render('/');
}
});
现在,上面的代码会发生什么,它可以正常运行,但它不会越过 DELETE 请求并呈现 /register 页面。然后节点服务器停止工作,我必须重新启动它并清除我的缓存。在我的 mongo db 中,它删除了用户,所以我不知道为什么会这样。
解决方案
我会将我的评论放入答案中,因为这最终为您解决了问题。
如果您要删除当前用户,但让他们的服务器端会话保持打开状态,那么这可能会导致会话问题。要清除该会话,您可以调用req.session.destroy()
或删除会话 cookie(会话将与该浏览器分离并最终消失)。
当您有一个已删除用户的会话时,您的站点变得无法运行这一事实可能意味着您在会话逻辑或代表不存在的用户访问数据库时遇到了一些错误处理问题。发生这种情况时,您的代码应该能够显示错误并至少报告错误,但可能会强制用户返回/login
.
推荐阅读
- sas - 有谁知道如何配置从 SAS 到 SPSS 的日期?
- python - 包括范围循环Python 3中的最后一个值
- javascript - chrome 扩展在所有 url 上运行
- css - 如何在css中给网格2列而不是1列
- sql - 什么查询将显示哪些运动员没有获得任何选票?(自加入)
- sql - 从 SQL 中的特定月份提取条目
- node.js - 识别第一个用户登录 (Node.js/JWT)
- heroku - 如何将 Redis rdb 文件导入 Heroku
- python - Python pygame.midi.Input.read() 的返回类型格式
- c# - 用于多个文件的 Sha256、sha512