[英]passing data using AngularJS $http.get method
我正在使用MEAN堆栈构建应用程序,该应用程序将利用从外部API检索的数据。 作为隐藏API密钥的一种措施,我想从服务器发出API请求,但是在将搜索词从Angular前端传递到服务器时遇到了问题。
以下代码是Angular控制器的一部分,该控制器应将请求与搜索词一起传递给服务器:
myApp.controller('mainController', ['$scope','$http', '$location', function($scope, $http, $location){
$scope.submit = function(){
$location.path('/results');
$http({method: 'GET', url: '/makeSearch', data: {term: $scope.term} });
}
}]);
然后以下服务器代码将使用body-parser
中间件解析请求:
app.get('/makeSearch', function(req, res) {
console.log("I received a command!");
console.log(req.body); });
但是,一旦尝试从前端传递/提交搜索词,服务器控制台上只会得到一个空对象。 关于我在做什么的任何提示? 任何帮助,将不胜感激。
我想到了! @Rikky提出了一个很好的观点,即http get请求的主体( req.body
)始终为空。 所以,通过登录只是req
到控制台,我计算出使用GET方法检索词如何被发送
在下面的代码中显示了在AngularJS控制器内的请求中使用params
代替data
:
revApp.controller('mainController', ['$scope','$http', '$location', function($scope, $http, $location){
$scope.submit = function(){
console.log($scope.term);
$location.path('/results');
$http({method: 'GET',
url: '/makeSearch',
params: {term: $scope.term}
});
} }]);
在服务器上,记录req.query
而不是req.body
,如下面的代码所示:
app.get('/makeSearch', function(req, res) {
console.log("I received a command!");
console.log(req.query); });
感谢您的帮助!
首先,您应该了解一些http基本知识,然后您将知道自己在做什么,然后,您将知道如何正确地进行操作:
使用HTTP GET方法意味着查询数据,而不是发送数据。 因此,使用GET方法的HTTP请求将没有正文,因此
request.body
将始终为空。
如果您确实要向服务器发送一些数据,则首选使用POST 。
如果您仍想通过get将数据发送到服务器,则使用查询字符串是最佳选择。 您可以在这个问题上查看
如果你想发送一些数据通过GET方法的服务器,但你不希望使用的查询字符串,你可以做一些黑客用HTTP标头的HTTP主体。
确保您的范围内有一个term属性。
myApp.controller('mainController', ['$scope','$http', '$location', function($scope, $http, $location){
$scope.term ='';
$scope.submit = function(){
$location.path('/results');
$http({method: 'GET', url: '/makeSearch', data: {term: $scope.term}
});
}
}]);
确保您的UI具有绑定到范围的term属性的元素
<input type="text" ng-model="term" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.