AngularJS $resource GET 参数出现在 URL

AngularJS $resource GET params appear in URL

当参数作为 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

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

定义:

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. 上面的前端代码生成一个 URL 来使用 REST 服务,其中参数是 URL 的一部分,即 http://localhost:port/login?username=myname&password=mypass [if I use GET method, POST is OK]. I wanted my front end to keep URL as http://localhost:port/login 和 post 通过正文的任何​​参数因为后端正在使用 req.body.paramName 来读取它们。 [实际解决方案]

  2. 如果 (1) 无法完成,并且我的前端正在发送参数作为 URL 的一部分,我需要帮助以了解如何装备我的后端以允许此 URL 带有参数,这样后端就不会 return 404 因为基础 URL http://localhost:port/login 已经存在了。

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

试试 $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
});

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

params{}
query{}
body{}

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

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