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
});
问题:
上面的前端代码生成一个 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 来读取它们。 [实际解决方案]
如果 (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{}
。
当参数作为 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
});
问题:
上面的前端代码生成一个 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 来读取它们。 [实际解决方案]
如果 (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{}
。