2

これは私のサービスです

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を使用しているため、末尾のスラッシュがないとエラーが発生します

You called this URL via POST, but the URL doesn't end in a slash

末尾のスラッシュはどこですか?

4

4 に答える 4

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');
    }
]);
于 2014-07-03T14:34:54.733 に答える
0

(Angularjs 1.3.0 の時点で) 末尾のスラッシュをオンにするだけです: https://docs.angularjs.org/api/ngResource/service/ $resource

于 2014-08-23T05:26:09.543 に答える