如何使用 express .node 、 mongoose 和 ejs 删除对象

How can I delete an object using express .node , mongoose and ejs

我在从数据库中删除对象时遇到错误,但是,当我使用 Postman 测试我的代码时它可以正常工作,所以我认为我的 ejs 语法不正确。

ejs代码

                    <center> <a class="delete_category_a" href="/halalMunchies/update-category/<%= category._id%>" style="color: red "> Delete </a> </center>

删除路线

    exports.deleteCategory = (req, res, next) => {

    console.log('DELETE  CATEGORY /delete-category');

    const id = req.params.id;
   

    categorySchema.findByIdAndDelete(id)
        .then(result => {
            //res.redirect('/halalMunchies/all-categories');
            res.send(console.log(result));
        })
        .catch(err => {
            console.log(err);
        });

};

浏览器错误

Cannot GET /halalMunchies/delete-category/6187cb11e3b98a7aa70a277a

您可以使用 JQuery 创建一个像这样的 DELETE 请求

$.ajax({
  type: "DELETE",
  url: `/route`,
  data: { /* as an object */ },

  success: function (data) {
    console.log(data);
  },

  error: function (data) {
    console.error(data);
  },
});

<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>

添加此标记以使用 JQuery 和 此行之后,引用您要添加先前代码的文件

这不是一个非常标准的方法,但由于您使用的是 ejs,所以这是一个非常实用的解决方案。

注意:JQuery 的脚本标签可能很旧,所以如果您遇到问题,我建议您访问最新的 JQuery URL

您当前的代码正在发送 GET 请求(这只是一个普通的 link),但您的请求处理程序用于 DELETE 请求。当前代码中的实际 <form> 没有执行任何操作,也不是当前操作的一部分。

因为 link 或表单都不能直接发送 DELETE 请求,您有以下选择:

  1. 你可以使用this technique发送一个表单POST并配置Express自动为你把它变成一个DELETE请求(使用中间件)因为你不能发送通过在浏览器中提交表单进行删除。

  2. 可以使用Javascript中的fetch()接口拦截点击或表单post并发送与上面相同的POST请求表示将变成一个 DELETE 请求。

  3. 可以使用Javascript中的fetch()接口拦截点击或表单post,直接使用Javascript发送DELETE请求。

  4. 您可以更改您的 Express 路线以期待 POST,然后使用表单提交或 fetch() 请求发送 POST。

我会推荐 #1 或 #3。

使用fetch()发送DELETE请求的示例代码:

const url = "/halalMunchies/update-category/<%= category._id%>";

fetch(url, {
    method: "DELETE",
    credentials: "include"
}).then(result => {
   // handle completion here
}).catch(err => {
   // handle error here
});