Express是否要求我使用POST路由删除?

时间:2017-07-29 17:26:02

标签: javascript node.js forms express pug

以下代码在单击并确认按钮时成功删除记录:

路由器(快速):

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是个问题?我做错了吗?

2 个答案:

答案 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 middlewarecustom logic部分显示了您如何创建一个类似于Rails处理方法覆盖的覆盖方式。

答案 1 :(得分:0)

这是一个惯例问题。除了DELPUT之外,jQuery(以及一般的Javascript)支持GETPOST,但没有任何内容阻止您使用GET或{{ 1}},正如你在上面所做的那样。将api调用与相应的调用同步是一个好习惯,但设置需要花费更多的精力。