当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
});
问题:
上面的前端代码生成一个URL来使用REST服务,其中参数是URL的一部分,即http://localhost:port/login?username=myname&password=mypass [如果我使用GET方法,POST就可以了]。我希望我的前端将URL保持为http://localhost:port/login并通过正文发布任何参数,因为后端使用req.body.paramName来读取这些参数。 [实际解决方案]
如果(1)无法完成,并且我的前端正在发送params作为URL的一部分,我需要帮助以了解如何装备我的后端以允许带有参数的URL,以便后端不会返回404作为基本网址http://localhost:port/login已经存在。
PS:对于(1),我尝试了this thread数据:{username:'',密码:''}但没有用。如果我遗漏了一些非常明显的或一些概念,请帮忙。
答案 0 :(得分: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
});
答案 1 :(得分:1)
我的nodejs / expressjs后端接收的每个请求都有三个传递属性的位置;
document.getElementById('lang').onchange = function() {
var dynamicTitle = this.value == 1 ? 'english title' : 'danish title';
marker.setTitle(dynamicTitle);
}
如果我想使用GET方法,我的问题(1)无法修复,因为GET请求参数作为URL的一部分可见,即http://localhost:port/login?username=myname&password=mypass。要发送我的用户名/密码,我必须使用POST作为params{}
query{}
body{}
的一部分发送参数。
我的问题(2)是我在使用GET并错误地在请求的body{}
中查找参数。相反,在GET请求中作为URL的一部分传递的参数将添加到请求的body{}
。