既存のサービスのほとんどを 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 データの送信に成功したことです。
どんな助けでも大歓迎です。ありがとう。