【问题标题】:AngularJS $resource GET params appear in URLAngularJS $resource GET 参数出现在 URL 中
【发布时间】:2015-09-06 16:46:14
【问题描述】:

当参数作为 URL 的一部分附加时,我的 REST 后端 [ 基于 NodeJS/express/mongojs] 抱怨 404(未找到)。后端rest接口编码如下;

var express = require('express');
var router = express.Router();
router.get('/login', auth.signin); //auth.signin is code to verify user

基于 AngularJS 的前端通过 $resource 使用以上 REST 服务,如下所示;

定义:

angular.module('myapp').factory('signinmgr', function($resource) {
    return $resource("http://localhost:3000/login", {}, {
        'get': {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json'
            }
        }});

用法:

signinmgr.get({'username':'myname', 'password':'mypass'}, function(data){
        //success 
    }, function(x){
        //failed
    });

问题:

  1. 上面的前端代码生成一个使用 REST 服务的 URL,其中参数是 URL 的一部分,即http://localhost:port/login?username=myname&password=mypass [如果我使用 GET 方法,POST 就可以]。我希望我的前端将 URL 保留为 http://localhost:port/login 并通过 body 发布任何参数,因为后端使用 req.body.paramName 来读取这些参数。 【实际解决方案】

  2. 1234563基本 URL http://localhost:port/login 已经存在。

PS:对于 (1),我尝试了 this thread 与 data:{username:'',password:''} 但没有用。如果我遗漏了一些非常明显的东西或一些概念,请提供帮助。

【问题讨论】:

    标签: angularjs node.js express angular-resource


    【解决方案1】:

    改用$http 服务:

    angular.module('myapp').factor('signinmgr', function($http) {
        return {
            login: function (username, password) {
                $http.post("http://localhost:3000/login", {
                    username: username,
                    password: password
                }
            }
        };
    });
    
    signinmgr.login('myname', 'mypass').then(function(data){
        //success 
    }, function(x){
        //failed
    });
    

    【讨论】:

    • 我选择了$resource 而不是$http 出于几个月前有意义的某些原因,并且它运行良好。我当时的后端是基于 restify 的。在当前的实现中,我将后端更改为 express,它开始抱怨 GET。知道当前的实现可能有什么问题吗?
    【解决方案2】:

    我的 nodejs/expressjs 后端收到的每个请求都有三个用于传递属性的位置;

    params{}
    query{}
    body{}
    

    如果我想使用 GET 方法,我的问题 (1) 无法解决,因为 GET 请求参数作为 URL 的一部分可见,即http://localhost:port/login?username=myname&password=mypass。要发送我的用户名/密码,我必须使用 POST 将参数作为body{} 的一部分发送。

    我的问题 (2) 是我使用 GET 并错误地在请求的 body{} 中查找参数。相反,在 GET 请求中作为 URL 的一部分传递的参数会添加到请求的 query{}

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 2015-08-16
      • 2014-04-22
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      相关资源
      最近更新 更多