带body的Angular $ http.delete请求

时间:2015-04-22 07:48:02

标签: ajax angularjs rest sails.js

所以我看了这篇文章: is an entity body allowed for an http delete request

这似乎表明虽然在某些概念层面上做“没事”,但在实践中它可能不可行,因为浏览器只是忽略它。

我有一些express.js身份验证中间件我需要通过,我不想将我的用户详细信息附加到url params。我需要进行身份验证的所有其他请求都会将这些详细信息附加到请求正文中。

有没有办法强迫这个?我看到其他一些帖子,其中有些人似乎成功通过删除请求传递了一个主体。

我正在运行一个节点/ sails后端。它始终将正文记录为未定义的删除请求。有没有办法修改

2 个答案:

答案 0 :(得分:3)

sails API从params中提取要删除的对象的ID ,因此我们必须将id附加到url。

但是如果我想在处理删除请求之前在服务器端验证中传递一些身份验证详细信息,我不能只将它们作为删除请求的第二个参数粘贴在对象中,就像你可以用$ http.post。

Angular的post方法会自动将我们插入的任何内容作为第二个参数分配给请求正文,但删除方法不会

Angular的$ http.delete方法允许我们提供一个配置对象作为第二个参数,通过它我们可以访问'data'属性。这与通过它的第二个参数发布它的方式相同。

因此,如果我们需要将主体附加到删除请求,我们可以使用以下内容:

$http.delete('/api/' + objectToDelete.id, {data: {id: currentUser().id, level: currentUser().level}});

这会将对象传递给url参数中的delete id,并将body中的用户凭据作为对象传递。

答案 1 :(得分:2)

老实说,每当一个麻烦听起来像是对REST"的限制时,对战略和哲学的重新思考可能是一个好主意。

  

我有一些我需要通过的身份验证中间件

     

我不想将我的用户详细信息附加到url params

我没有直接回答这个问题,但你应该知道这些问题

  • 网址参数(或查询,但无论如何都是网址)

第三个选项是"将值传递给服务器" :

  • 请求标题

我建议考虑提供您的凭据的第三个选项:请求标题

编辑以下附录只适用于任何"外部"中间件,如代理服务器或其他什么,不是sails.js中真正的快速中间件

此外,在重定向到实际操作之前,中间件剥离这些标头是个好主意。