AngularJS文章,带$resource发送查询字符串,我做错了什么?

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

我对Angular有点不在行,在尝试发布到Drupal服务端点时遇到了问题。我可以使用HttpRequester(FFox插件)发布,但是我所有使用Angular发布数据以获取会话的尝试都会导致401 Unauthorized:缺少必需的参数用户名或其他错误

这是我的测试工厂资源,带有默认输入:

    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”});};而且没有任何影响。