以下代码在单击并确认按钮时成功删除记录:
路由器(快速):
router.post('/meetings/delete/:slug', catchErrors(meetingController.deleteMeeting));
控制器:
exports.deleteMeeting = async (req, res) => {
const slug = req.params.slug;
const meeting = await Meeting.remove({ slug });
req.flash('success', 'meeting successfully deleted!');
res.redirect(`/meetings`);
};
查看模板(Pug / Jade):
form.delete-meeting-form(method='POST' action=`/meetings/delete/${meeting.slug}?_method=DELETE`)
input.button.button--delete(type='submit' value='DELETE MEETING' onclick='return confirm("Are you sure you want to delete this meeting? (Cannot be undone)")')
此代码原样很好用。但是,我似乎很奇怪,我似乎需要使用POST路由才能完成DELETE请求。当我尝试使用router.delete
来形成路线时,它不起作用。
我理解HTML并不能很好地支持DELETE和PUT / PATCH请求,但为什么命名我的Express路由delete
是个问题?我做错了吗?
答案 0 :(得分:2)
Delete will work fine with express.常规HTML表单不支持删除。如果向应用程序添加删除路由,则可以使用ajax(fetch,axios,jQuery等)或curl来测试delete方法:
curl -X "DELETE" http://foo/meetings/some-meeting
如果您希望能够将常规HTML表单与delete
一起使用,请查看method-override middleware。 custom logic部分显示了您如何创建一个类似于Rails处理方法覆盖的覆盖方式。
答案 1 :(得分:0)
这是一个惯例问题。除了DEL
和PUT
之外,jQuery(以及一般的Javascript)支持GET
和POST
,但没有任何内容阻止您使用GET
或{{ 1}},正如你在上面所做的那样。将api调用与相应的调用同步是一个好习惯,但设置需要花费更多的精力。