我有一个定义了api服务的angularJS应用程序,如下所示:
(function ()
{
'use strict';
angular
.module('myApp')
.factory('api', apiService);
/** @ngInject */
function apiService($resource)
{
var api = {};
// Base Url
api.baseUrl = 'http://localhost:37243/';
api.Auth = $resource(api.baseUrl + 'auth/:verb', {}, {
login: {
method: "POST",
params: {
verb: 'credentials'
}
},
logout: {
method: "GET",
params: { verb: 'logout' }
},
getSession: {
method: "GET",
params: { verb: 'session' }
}
});
return api;
}
})();
我正在从Auth服务执行登录方法,如下所示:
authService.login = function (user, success, error) {
var apiAuth = new api.Auth();
apiAuth.$login(user).then(
function (response) {
var loginData = response;
authService.getSession();
$rootScope.$broadcast(AUTH_EVENTS.loginSuccess);
success(loginData);
}, function (response) {
$rootScope.$broadcast(AUTH_EVENTS.loginFailed);
error(response);
});
};
api调用正在运行,但它正在查询字符串中传递有效负载,而不是数据有效负载。我想我的$ resource配置错误,但无法弄清楚原因。
正在发送什么:
http:// localhost:37243 / auth / credentials?password = Password1&username = admin
我要发送的内容:
POST http:// localhost:37243 / auth / credentials {密码:“ Password1”,用户名:“ admin”}
有任何想法吗?
我已经解决了这个问题...
原因是因为我要实例化资源对象Auth,然后执行该方法。
从ngResource文档中,“非GET”方法(如我的方法)的方法签名为:
非GET“类”操作:Resource.action([参数],postData,[成功],[错误])
非GET实例操作:instance。$ action([参数],[成功],[错误])
所以我在没有postData参数的第二种情况下运行。
更改我的代码以不实例化该对象,如下所示:
//the login function
authService.login = function(user, success, error) {
api.Auth.login(null, user).then(
function(response) {
var loginData = response;
authService.getSession();
$rootScope.$broadcast(AUTH_EVENTS.loginSuccess);
success(loginData);
}, function(response) {
$rootScope.$broadcast(AUTH_EVENTS.loginFailed);
error(response);
});
};
有关更多信息,请参见此SO答案(已投票)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句