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

Posted

技术标签:

【中文标题】如何使用 express .node 、 mongoose 和 ejs 删除对象【英文标题】:How can I delete an object using express .node , mongoose and ejs 【发布时间】:2021-12-20 13:10:40 【问题描述】:

我从数据库中删除一个对象时遇到错误,但是,当我使用 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

【问题讨论】:

您页面中的链接发出 GET 请求,但您的路由是为 DELETE 请求定义的,因此您的路由永远不会匹配。您还将此链接嵌入到表单 POST 中,但实际上从未执行任何操作,因为没有提交表单。 那么你认为我应该如何解决这个问题 我写了一个答案,概述了一些选项。 【参考方案1】:

您可以使用 JQuery 来创建这样的 DELETE 请求

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

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

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

&lt;script src="https://code.jquery.com/jquery-1.12.3.min.js"&gt;&lt;/script&gt;

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

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

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

【讨论】:

将此添加到事件处理程序以单击要分配给它的元素【参考方案2】:

您当前的代码正在发送一个 GET 请求(它只是一个普通链接),但您的请求处理程序是针对一个 DELETE 请求。当前代码中的实际 &lt;form&gt; 没有做任何事情,也不是当前操作的一部分。

由于链接或表单都不能直接发送 DELETE 请求,因此您有以下选择:

    您可以使用this technique 发送表单 POST 并配置 Express 以自动将其转换为您的 DELETE 请求(使用中间件),因为您无法通过浏览器中的表单提交来发送 DELETE。

    您可以使用javascript中的fetch()接口来拦截点击或表单帖子,并发送上面相同的POST请求,Express会变成一个DELETE请求。

    您可以使用Javascript中的fetch()接口来拦截点击或表单帖子,并直接使用Javascript发送DELETE请求。

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

我会推荐 #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
);

【讨论】:

感谢您的精彩解释,我按照您的建议使用 fetching API 方法,但在触发 javaScript 函数时遇到了另一个问题。这是问题描述***.com/q/69881107/15454800

以上是关于如何使用 express .node 、 mongoose 和 ejs 删除对象的主要内容,如果未能解决你的问题,请参考以下文章

windows 配置express+mongoDB 简单项目

如何正确互连 Apollo Server/mongodb/express?

如何使用 Mongoose、Express、Angular 4 和 NodeJS 上传/保存和显示图片

使用 Node.js 和 Express 发布时如何访问请求正文?

如何使用 Express/Node 以编程方式发送 404 响应?

如何使用 node.js/express 中止请求?