首页 > 解决方案 > 无法使用 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

我在方法覆盖方面没有取得任何成功,所以我想知道我是否遗漏了什么?

标签: node.jsmongooseejs

解决方案


尽管您可以通过 POST 请求执行删除操作,但建议对每种情况使用正确的 http VERB(GET、POST、PUT、DELETE ..)。因此,在您的情况下,我将使用 AJAX 删除请求来删除文档。
顺便说一句,您的第一个选项 (action="/deleteEmp" method="POST") 不起作用的原因是您的控制器中的错误。使用name: req.body.name而不是name: req.params.name. 您发送的数据在body您的请求对象中。


推荐阅读