2015-09-06 62 views
0

当Params作为URL的一部分附加时,我的REST后端[基于NodeJS/express/mongojs]抱怨404(未找到)。后台休息界面编码如下;

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 [如果我使用GET方法,POST是好]。我希望我的前端将URL保存为http://localhost:port/login,并通过body发布任何参数,因为后端正在使用req.body.paramName来读取这些参数。 [实际解决方案]

  2. 如果(1)无法完成,并且我的前端将PARAMS作为URL的一部分发送,我需要帮助以了解如何装备我的后端以允许此URL带有参数,以便后端不返回404作为基本URL http://localhost:port/login已经在那里。

PS:对于(1),我试图this thread与数据:{用户名: '',密码: ''},但没有用的。如果我错过了一些非常明显的或某些概念,请帮助。

回答

1

我的NodeJS/expressjs后端接收具有通过属性三个地方的每个请求;

params{} 
query{} 
body{} 

我的问题(1)不能被固定的情况下,我想使用GET方法,因为用GET请求参数可见作为URL即http://localhost:port/login?username=myname&password=mypass的一部分。要发送我的用户名/密码,我必须使用POST作为body{}的一部分发送参数。

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

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 
}); 
+0

我选择了'$ resource'而不是'$ http',这是因为某些原因在几个月前就已经有意义了,而且它正在运行perfectl。那时我的后端基于_restify_。在当前的实现中,我将后端更改为_express_,并开始用'GET'抱怨。任何关于当前实现可能出错的想法? – hammad