如何使用 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 请求,您有以下选择:
你可以使用this technique发送一个表单POST并配置Express自动为你把它变成一个DELETE请求(使用中间件)因为你不能发送通过在浏览器中提交表单进行删除。
可以使用Javascript中的fetch()
接口拦截点击或表单post并发送与上面相同的POST请求表示将变成一个 DELETE 请求。
可以使用Javascript中的fetch()
接口拦截点击或表单post,直接使用Javascript发送DELETE请求。
您可以更改您的 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
});
我在从数据库中删除对象时遇到错误,但是,当我使用 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 请求,您有以下选择:
你可以使用this technique发送一个表单POST并配置Express自动为你把它变成一个DELETE请求(使用中间件)因为你不能发送通过在浏览器中提交表单进行删除。
可以使用Javascript中的
fetch()
接口拦截点击或表单post并发送与上面相同的POST请求表示将变成一个 DELETE 请求。可以使用Javascript中的
fetch()
接口拦截点击或表单post,直接使用Javascript发送DELETE请求。您可以更改您的 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
});