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)除了支持GETPOST ,还支持DELPUT ,但没有什么能阻止你使用GETPOST来删除,就像你上面这样做。 同步你的API调用与相应的调用是一个很好的做法,但它需要更多的努力来设置。