DELETE宁静法angularjs $资源 [英] DELETE Restful method with angularjs $resource
问题描述
我attemping调用通过$资源REST风格的方法如下:
资源
angular.module('安全',['ngResource'])。工厂('车',函数($资源){
返回$资源('/安全/车/索引,{ID:'@id'},{
查询:{
方法:GET,
IsArray的:真
},
删除:{
方法:删除,
IsArray的:假的,
网址:'/安全/车/删除/:身份证'
}
});
});
然后,从其他服务我注入上述工厂,我把这样DELETE方法:
factory.delete =功能(procedureId){
VAR车辆=新车();
。车辆$删除({ID:procedureId},函数(){
//成功
deferred.resolve();
},功能(errResponse){
//失败
的console.log(errResponse);
});
返回deferred.promise;
};
(注意不要递延的东西,它不会有或没有它的工作)的
不幸的是,我总是得到相同的答案:
远程地址:127.0.0.1:8080
请求URL:http://本地主机:8080 /安全/车/删除/ 21
请求方法:DELETE
状态code:422无法处理的实体
调用本身设置正确(安全/车/删除/ 21 的)。事实上,如果我这样做,但不是使用$资源变量,使用的 $ HTTP 后,一切正常!
$ HTTP({
方法:删除,
URL:'/安全/车/删除/+ procedureId,
头:{
内容类型:应用/ JSON
},
数据:
})
.success(函数(){
//成功
})
.error(功能(数据,状态){
的console.log(data.errors);
});
所以,我想缺少的东西在$资源的方式,但什么?任何帮助,这将是AP preciated!
编辑:
这似乎是一个后端的问题时,它读取整个URL电话。如果我叫DELETE资源,使用的 $ HTTP ,加入数据:
因为我在上面,后端可以正确初始化本身。
但如果我尝试在 $资源 -way,所需的PARAMS是pre-配置,并且不喜欢到后端,所以我需要找到要说到$资源怎样的方式增加类似数据:?
,任何想法
测试证明,它的作品:
angular.module('安全',['ngResource'])。厂( 车辆,函数($资源){\r
返回$资源('/安全/车/指数',{\r
ID:@Id\r
},{\r
查询:{\r
方法:GET,\r
IsArray的:真\r
},\r
删除:{\r
方法:删除,\r
IsArray的:假的,\r
网址:'/安全/车/删除/:身份证'\r
}\r
});\r
});\r
\r
angular.module(安全)。工厂('VehicleFactory',函数(车辆,$ Q){\r
变种工厂= {}\r
\r
factory.delete =功能(procedureId){\r
变种推迟= $ q.defer();\r
VAR车辆=新车();\r
车辆。$删除({\r
ID:procedureId\r
},功能(R){\r
deferred.resolve(R);\r
},功能(errResponse){\r
的console.log(errResponse);\r
});\r
返回deferred.promise;\r
};\r
\r
回厂;\r
});\r
\r
描述(VehicleFactory',函数(){\r
\r
变量$ httpBackend,VehicleFactory\r
\r
beforeEach(模块('安全'));\r
\r
beforeEach(注(功能(_ $ httpBackend_,_VehicleFactory_){\r
$ httpBackend = _ $ httpBackend_\r
VehicleFactory = _VehicleFactory_\r
}))\r
\r
\r
它('删除车辆 - 车辆$删除()',函数(){\r
变种R = {\r
数据:正确反应\r
}\r
\r
$ httpBackend.when('删除','/secure/vehicle/delete/123').respond(r)\r
\r
VehicleFactory.delete(123)。然后(功能(响应){\r
期待(response.data).toBe(r.data)\r
})\r
\r
$ httpBackend.flush();\r
});\r
\r
afterEach(函数(){\r
$ httpBackend.verifyNoOutstandingExpectation()\r
$ httpBackend.verifyNoOutstandingRequest()\r
})\r
\r
})
\r
<链接HREF =// safjanowski.github.io/jasmine-jsfiddle -pack /包/ jasmine.css的rel =stylesheet属性/>\r
&LT;脚本src=\"//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js\"></script>\r
&LT;脚本的src =// ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js\"></script>\r
&LT;脚本的src =// ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-resource.min.js\"></script>\r
&LT;脚本src=\"//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-mocks.js\"></script>$c$c>$p$p>\r
有些更清洁的方式来写,而不$ Q删除功能:
angular.module(安全)。工厂('VehicleFactory',函数(车辆){
变种工厂= {} factory.delete =功能(procedureId){
回报率(新车())。$删除({
ID:procedureId
})
} 回厂;
});
I'm attemping to call a RESTful method via $resource as following:
Resource:
angular.module('secure',['ngResource']).factory('Vehicle', function ($resource) {
return $resource('/secure/vehicle/index', { id: '@id' }, {
query: {
method: 'GET',
isArray: true
},
delete: {
method: 'DELETE',
isArray: false,
url: '/secure/vehicle/delete/:id'
}
});
});
Then, from other service I inject the above factory and I call DELETE method in this way:
factory.delete = function (procedureId) {
var vehicle = new Vehicle();
vehicle.$delete({id: procedureId}, function () {
//success
deferred.resolve();
}, function (errResponse) {
// fail
console.log(errResponse);
});
return deferred.promise;
};
(Don't pay attention to deferred things, it doesn't work with or without it) Unfortunately, I always get the same answer:
Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/secure/vehicle/delete/21
Request Method:DELETE
Status Code:422 Unprocessable Entity
The call itself is set up properly (secure/vehicle/delete/21). In fact, if I do the same, but instead of using $resource variable, using $http, everything works!
$http({
'method': 'DELETE',
'url': '/secure/vehicle/delete/' + procedureId,
'headers': {
'Content-Type': 'application/json'
},
'data': ""
})
.success(function () {
// success
})
.error(function (data, status) {
console.log(data.errors);
});
So, I guess something is missing in $resource-way, but what? Any help, it will be appreciated!
EDIT:
It seems it's a backend problem when it reads the entire url call. If I call DELETE resource, using $http, adding the data: ""
as I show above, the backend initializes itself properly.
But if I try the $resource-way, the required params are pre-configured and that doesn't like to the backend, so I need to find the way to say to $resource how to add something like data: ""
, any ideas?
Test proof that it works:
angular.module('secure', ['ngResource']).factory('Vehicle', function($resource) {
return $resource('/secure/vehicle/index', {
id: '@id'
}, {
query: {
method: 'GET',
isArray: true
},
delete: {
method: 'DELETE',
isArray: false,
url: '/secure/vehicle/delete/:id'
}
});
});
angular.module('secure').factory('VehicleFactory', function(Vehicle, $q) {
var factory = {}
factory.delete = function(procedureId) {
var deferred = $q.defer();
var vehicle = new Vehicle();
vehicle.$delete({
id: procedureId
}, function(r) {
deferred.resolve(r);
}, function(errResponse) {
console.log(errResponse);
});
return deferred.promise;
};
return factory;
});
describe('VehicleFactory', function() {
var $httpBackend, VehicleFactory
beforeEach(module('secure'));
beforeEach(inject(function(_$httpBackend_, _VehicleFactory_) {
$httpBackend = _$httpBackend_
VehicleFactory = _VehicleFactory_
}))
it('deletes vehicle - vehicle.$delete()', function() {
var r = {
data: 'correct response'
}
$httpBackend.when('DELETE', '/secure/vehicle/delete/123').respond(r)
VehicleFactory.delete(123).then(function(response) {
expect(response.data).toBe(r.data)
})
$httpBackend.flush();
});
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation()
$httpBackend.verifyNoOutstandingRequest()
})
})
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" />
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-resource.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-mocks.js"></script>
Some much cleaner way to write delete functionality without $q:
angular.module('secure').factory('VehicleFactory', function(Vehicle) {
var factory = {}
factory.delete = function(procedureId) {
return (new Vehicle()).$delete({
id: procedureId
})
}
return factory;
});
这篇关于DELETE宁静法angularjs $资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!