这是我的服务
album.factory('albumService', function($resource) {
return $resource('/album/v1/album/:id', {id:'@id'})
});
然而,当我尝试创建一个专辑时
var newAlbum = new albumService($scope.album)
newAlbum.$save()
angular会向'/ album / v1 / album'发送一个帖子请求,这是错误的,它会删除我应该是'/ album / v1 / album /'的尾随斜杠。
因为我正在使用tastypie,没有尾随斜线,错误会rasie
You called this URL via POST, but the URL doesn't end in a slash
我的尾随斜线在哪里?
答案 0 :(得分:2)
我使用了git问题线程中提到的解决方法,它也适用于firefox。
angular.module('ngResource').config([
'$provide', '$httpProvider',
function($provide, $httpProvider) {
$provide.decorator('$resource', function($delegate) {
return function() {
if (arguments.length > 0) { // URL
arguments[0] = arguments[0].replace(/\/$/, '\\/');
}
if (arguments.length > 2) { // Actions
angular.forEach(arguments[2], function(action) {
if (action && action.url) {
action.url = action.url.replace(/\/$/, '\\/');
}
});
}
return $delegate.apply($delegate, arguments);
};
});
$provide.factory('resourceEnforceSlashInterceptor', function() {
return {
request: function(config) {
config.url = config.url.replace(/[\/\\]+$/, '/');
return config;
}
};
});
$httpProvider.interceptors.push('resourceEnforceSlashInterceptor');
}
]);
答案 1 :(得分:0)
可能只有两种方法可以解决问题
1)在url \\/
的末尾添加两个正斜杠和尾随斜杠(但它在firefox中不起作用)
2)使用传统的$ http
答案 2 :(得分:0)
答案 3 :(得分:0)
现在(从Angularjs 1.3.0开始)你可以打开尾随斜杠:https://docs.angularjs.org/api/ngResource/service/ $ resource