AngularJS文章,带$resource发送查询字符串,我做错了什么?
我对Angular有点不在行,在尝试发布到Drupal服务端点时遇到了问题。我可以使用HttpRequester(FFox插件)发布,但是我所有使用Angular发布数据以获取会话的尝试都会导致401 Unauthorized:缺少必需的参数用户名或其他错误 这是我的测试工厂资源,带有默认输入:AngularJS文章,带$resource发送查询字符串,我做错了什么?,angularjs,web-services,rest,post,Angularjs,Web Services,Rest,Post,我对Angular有点不在行,在尝试发布到Drupal服务端点时遇到了问题。我可以使用HttpRequester(FFox插件)发布,但是我所有使用Angular发布数据以获取会话的尝试都会导致401 Unauthorized:缺少必需的参数用户名或其他错误 这是我的测试工厂资源,带有默认输入: userInfoApp.factory('LoginService', function($resource) { return $resource('/auth-service/u
userInfoApp.factory('LoginService', function($resource) {
return $resource('/auth-service/user/login', {username: 'admin', password: 'admin'}, {
update: {
method: 'POST', // this method issues a POST request
headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
}
});
});
以下是我在控制器内对其进行的呼叫(此):
到目前为止,这通常会生成如下所示的查询字符串:
以及以下人士的回应:
401未经授权:缺少必需的参数用户名
我可能做错了什么?我已经得到$resource,可以很好地与其他端点配合使用(比如菜单服务检索菜单),但是发布似乎要挑剔得多。如有任何建议,将不胜感激
感谢您当前对$resource的配置将用户名和密码作为querystring发送。因此,它们出现在您的URL中。我假设您需要这些值才能发布 根据文档,所有非GET方法在
操作方法中都有一个有效负载参数:
非获取“类”操作:Resource.action([parameters]、postData、,
[成功],[错误])
您需要做的是停止将参数作为默认值发送[parameters]
,并使用postData
将数据发送到Drupal服务端点。您可以在调用$update()
时执行此操作,如下所示:
LoginService.update({}, {username: "admin",password: "admin"});
$resource的当前配置将用户名和密码作为querystring发送。因此,它们出现在您的URL中。我假设您需要这些值才能发布
根据文档,所有非GET方法在操作方法中都有一个有效负载参数:
非获取“类”操作:Resource.action([parameters]、postData、,
[成功],[错误])
您需要做的是停止将参数作为默认值发送[parameters]
,并使用postData
将数据发送到Drupal服务端点。您可以在调用$update()
时执行此操作,如下所示:
LoginService.update({}, {username: "admin",password: "admin"});
好吧,我找到了一个可行的方法;对于控制器功能:
this.login = function() {
var data = {
username: this.username,
password: this.password
};
var login = LoginService.save({}, data,
function(data) {
// possibly do stuff with result
},
function(reply) {
// Comments on best way to access $scope here are welcome.
// This feels a bit weird to me.
$scope.info.errorMessage = reply.statusText;
}
);
};
对于工厂服务:
// Login factory service
userInfoApp.factory('LoginService', function($resource) {
return $resource('/auth-service/user/login');
});
这实际上是从服务器检索会话id和其他用户数据。好的,我找到了一种可行的方法;对于控制器功能:
this.login = function() {
var data = {
username: this.username,
password: this.password
};
var login = LoginService.save({}, data,
function(data) {
// possibly do stuff with result
},
function(reply) {
// Comments on best way to access $scope here are welcome.
// This feels a bit weird to me.
$scope.info.errorMessage = reply.statusText;
}
);
};
对于工厂服务:
// Login factory service
userInfoApp.factory('LoginService', function($resource) {
return $resource('/auth-service/user/login');
});
这实际上是从服务器检索会话id和其他用户数据。您的$resource配置似乎正在使用POST方法。。你的URL有查询字符串吗?您能否检查Drupal服务端点是否可以获取这些参数?我相信你的Drupal服务调试不会得到参数!否服务无法获取参数。事实上,我也不想这样。我想让这篇文章实际发表。不应在查询字符串上登录。您的$resource配置似乎正在使用POST方法。。你的URL有查询字符串吗?您能否检查Drupal服务端点是否可以获取这些参数?我相信你的Drupal服务调试不会得到参数!否服务无法获取参数。事实上,我也不想这样。我想让这篇文章实际发表。不应在查询字符串上进行登录。抱歉,这没有完成。将服务调用更改为:this.login=function(){var login=LoginService.update({},{用户名:“admin”,密码:“admin”});};而且没有任何影响。对不起,这没用。将服务调用更改为:this.login=function(){var login=LoginService.update({},{用户名:“admin”,密码:“admin”});};而且没有任何影响。