angular $ save方法使用错误的URL触发发布请求

时间:2013-06-26 06:08:20

标签: url angularjs resources save

这是我的服务

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

我的尾随斜线在哪里?

4 个答案:

答案 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)

证明这是django后端用户的错误

Git issue list

Mailing list

答案 3 :(得分:0)

现在(从Angularjs 1.3.0开始)你可以打开尾随斜杠:https://docs.angularjs.org/api/ngResource/service/ $ resource