我能够将大多数现有服务转换为使用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
}
});
};
});
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
飞行前的RestangularProvider.setBaseUrl('https://dev.foo.com/');
RestangularProvider.setDefaultHttpFields({
withCredentials: true,
useXDomain : true,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
通过,并放弃了。我的原始服务和我正在尝试使用的Restangular调用之间有什么区别?
值得注意的是我确实为Restangular设置了默认配置参数(以镜像原始服务)
GET
我的Restangular OPTIONS
在https:// WORK上需要凭据,并成功通过{{1}}阶段,并设法发送cookie数据,这有点奇怪。
感谢任何帮助。感谢。
答案 0 :(得分:0)
我不确定您要尝试的实际路线,但Restangular.one('auth')
似乎您需要定义资源标识符(例如POST /auth/123?username_or_email=moi
)。
如果您尝试触及POST /auth?username_or_email=moi
(使用HTTP参数中的cred
),请尝试Restangular.all('auth')
。
如果这不能解决问题,请提供您在浏览器的网络检查器中看到的URI以及您想要访问的URI。