如何使用 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);
,
);
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
添加此标记以使用 JQuery 和 在此行之后,引用您要添加之前代码的文件
这不是一个非常标准的方法,但由于您使用的是 ejs,这是一个非常实用的解决方案。
注意:JQuery 的脚本标签可能是旧的,所以如果您遇到问题,我建议访问最新的 JQuery URL
【讨论】:
将此添加到事件处理程序以单击要分配给它的元素【参考方案2】:您当前的代码正在发送一个 GET 请求(它只是一个普通链接),但您的请求处理程序是针对一个 DELETE 请求。当前代码中的实际 <form>
没有做任何事情,也不是当前操作的一部分。
由于链接或表单都不能直接发送 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 发布时如何访问请求正文?