1

既存のサービスのほとんどを Restangular を使用するように変換することができました。以外はすべてPOST正常に動作しています。

働くオリジナルPOSTサービス

app.service('APIService', function($http, $q){
...
this.post = function(api, route, params){
        var d = $q.defer();
        $http({
            url : base_urls[api] + route,
            method : 'POST',
            data : params,
            withCredentials: true,
            useXDomain : true,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'

            }
        }).success(function(data){
            d.resolve(data);
            try{
               toastr.success(toastMsg[route].win, 'Success');  
            } catch(err){}

        }).error(function(data){
            d.reject(data);
            try{
                toastr.error(toastMsg[route].fail, 'Whoops');
            } catch(err){}

        });
        return d.promise;
    }
});

これは次のように使用されます:

app.controller('AuthController', function($scope, APIService){
    $scope.login = function(username_or_email, password, redirectUrl){
        APIService.post('root', '/login', {
            'username_or_email' : username_or_email, 
            'password' : password
        }).then(function(r){

        if(r.success){
            window.location = redirectUrl;
        }else
        {
          // handle this 
        }
      });
   };
});

Reangular への変換

app.controller('AuthController', function ($scope, toastrFactory, Restangular) {
    $scope.login = function (username_or_email, password, redirectUrl) {
        var login = Restangular.one('auth'),
            creds = {
                'username_or_email': username_or_email,
                'password': password
            };


        login.post('login', creds).then(function (r) {
            window.location = redirectUrl || '/profile';
        }, function () {
            toastrFactory.error(['Error', 'Login not successful'])
        })
    };
});

上記はプリフライトOPTIONSパスに失敗し、あきらめました。元のサービスと使用しようとしている Restangular 呼び出しの違いは何ですか?

Restangular のデフォルトの構成パラメータを設定したことは注目に値します (元のサービスをミラーリングするため)。

RestangularProvider.setBaseUrl('https://dev.foo.com/');
    RestangularProvider.setDefaultHttpFields({
        withCredentials: true,
            useXDomain : true,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'

            }
    });

奇妙なのは、私の RestangularGETが https:// WORK の資格情報を必要とし、OPTIONSフェーズを正常に通過し、Cookie データの送信に成功したことです。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

到達しようとしている実際のルートについてはわかりませんがRestangular.one('auth')、リソース識別子 (例: ) を定義する必要があるようですPOST /auth/123?username_or_email=moi

到達しようとしている場合POST /auth?username_or_email=moi( credHTTP パラメータで)、 を試してくださいRestangular.all('auth')

これで問題が解決しない場合は、ブラウザーのネットワーク インスペクターに表示されている URI と、アクセスしたい URI を提供してください。

于 2013-10-29T07:35:31.957 に答える