为什么$ httpBackend不会填充params

时间:2015-12-04 14:16:36

标签: javascript angularjs single-page-application angularjs-e2e httpbackend

我有一个$资源,用于处理实体的crud http请求。它包含在我的自定义服务中,目前还没有添加任何功能,所以不用担心 - 它只是旧的纯资源:

app.factory('coursesService', ['$resource', coursesService]);

function coursesService($resource) {
    return $resource('/api/courses/:id', {
  id: '@id'
}, {
  update: {
    method: 'PUT'
  }
});

}

所以,我试图删除我的控制器中的一个instanse(存储在控制器对象的courseToDelete属性中):

this.courseToDelete.$remove()

我使用来自ngMockE2E模块的$ httpBackend服务来模拟后端:

$httpBackend.whenDELETE(/api\/courses\/(.+)/, undefined, undefined, ['id'])
  .respond(function(method, url, data, headers, params) {
    clientStorage.deleteCourse(params.id);
    return [200, {}];
  });

因此,当$ resource发送DELETE http请求时,我希望能够从我的本地存储中删除它(因为我没有后端,将数据存储在localstorage中作为序列化的JSON字符串)

我试图删除的对象:

 {
      id: 1,
      name: 'Course 1',
      duration: 380,
      description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' +
      ' Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' +
      ' Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur' +
      ' sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
      created: new Date(2011,10,30),
      authors: [
        'Пушкин', 'Лермонтов'
      ]
    }

docs我预期我的params参数将具有id属性但是当函数执行params时未定义,尽管所有其他参数看起来都很好。我在这做错了什么?enter image description here

1 个答案:

答案 0 :(得分:1)

来自angular $ httpBackend docs。

whenDELETE(url, [headers], [keys])

但您正在使用whenDELETE(url, undefined, undefined, [keys])

所以你的keys参数是未定义的,没有任何东西作为参数传递。

更新:请注意,此功能未针对1.4.8及更早版本

实施