node.js - 无法使用 DELETE 或 POST 请求成功删除 mongoose DB 中的文档
问题描述
我正在尝试通过我的 admin.ejs 页面删除我的猫鼬数据库中的员工。
到目前为止,我已经尝试处理普通的 POST 请求和使用方法覆盖的 DELETE,但都不起作用。
//尝试没有方法覆盖
//架构//
const empSchema = {
name: String,
number: String
};
const Employee = mongoose.model("Employee", empSchema);
//admin.ejs//
<form action="/deleteEmp" method="POST" >
<div>
<label>Name</label>
<input type="text" name="name">
</div>
<button class="btn btn-primary" type="submit">Delete Employee</button>
</form>
//app.js//
app.post("/deleteEmp", function(req, res) {
Employee.findOneAndDelete({name: req.params.name}, function(err, result) {
if(!err) {
console.log('User Deleted');
res.redirect("admin");
} else {
console.log(err);
}
});
});
//尝试方法覆盖//
//admin.ejs//
<form method="POST" action="/deleteEmp?_method=DELETE">
<div>
<label>ID</label>
<input type="text" name="id">
</div>
<button class="btn btn-primary" type="submit">Delete Employee</button>
</form>
//app.js//
app.delete("/deleteEmp", function(req, res) {
Employee.findOneAndDelete({name: req.params.name}, function(err, result)
{
if(!err) {
console.log('User Deleted');
res.redirect("admin");
} else {
console.log(err);
}
});
});
在我没有方法覆盖的尝试中,如果将其设置为 POST 方法而不是 DELETE 但未删除员工,它将通过。如果该方法设置为 DELETE,它会返回 cannot GET /deleteEMP
我在方法覆盖方面没有取得任何成功,所以我想知道我是否遗漏了什么?
解决方案
尽管您可以通过 POST 请求执行删除操作,但建议对每种情况使用正确的 http VERB(GET、POST、PUT、DELETE ..)。因此,在您的情况下,我将使用 AJAX 删除请求来删除文档。
顺便说一句,您的第一个选项 (action="/deleteEmp" method="POST") 不起作用的原因是您的控制器中的错误。使用name: req.body.name
而不是name: req.params.name
. 您发送的数据在body
您的请求对象中。
推荐阅读
- microsoft-graph-api - Outlook rest api 仅用于本地设置
- javascript - 加载令牌字段后输入字段值未更新
- arrays - 通过 tcp 接收大数据 - socket.MSG_WAITALL 直接进入 numpy 缓冲区是个坏主意吗?
- python - 如何在一个地方编写 try/except 代码,但要进行多次评估
- package - Packagecontrol.io 关闭
- c++11 - 在方法中调用随机数生成器
- django - Django 将新创建的 ID 从 Models.Manager 传递给视图
- python-3.x - 如何消除 win32com 中的“UnpicklingError: invalid load key, '\x00'”?
- elasticsearch - Elasticserach 未通过 logstash 为新管道创建索引
- git - 我们可以在不同的远程存储库中设置分支的上游吗