Express是否要求我使用POST路由删除?
以下代码在单击并确认button时成功删除logging:
路由器(Express):
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`); };
查看模板(帕格/翡翠):
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
是一个问题? 我做错什么了吗?
删除将与快递工作正常。 常规的HTML表单不支持删除。 如果你添加一个删除路由到你的应用程序,你可以使用ajax(fetch,axios,jQuery等)或curl来testingdelete方法:
curl -X "DELETE" http://foo/meetings/some-meeting
如果您希望能够使用带有delete
常规HTML表单,请查看方法覆盖中间件 。 自定义逻辑部分显示了如何创build一个类似于Rails处理方法重写的重写。
这是一个惯例。 jQuery(和一般的Javascript)除了支持GET
和POST
,还支持DEL
和PUT
,但没有什么能阻止你使用GET
或POST
来删除,就像你上面这样做。 同步你的API调用与相应的调用是一个很好的做法,但它需要更多的努力来设置。