Angular $ http GET不传递string到后端。 未定义?

我试图通过Mongoose使用.find()来获取基于item_id(不同于MongoDB分配_id)的特定项目。 但是,没有任何东西传到后端。 我的路由文件中的console.log(item)返回一个空对象。

该项目看起来像这样:

var item = { item_id : "String Identifier", desc: "String Description about item" } 

我的angular度控制器:

 // itemCtrl.js App.controller('itemCtrl', function($scope, $stateParams, $http) { $scope.item= $stateParams.itemId; $scope.getItem = function(){ $http.get('http://localhost:3000/items/:itemId', $scope.item) .success(function(data){ console.log("Grabbing a single item with id " + data.item_id); $scope.item= data; }, function(err){ console.log(err); }); }; }); 

我的Express后端路由:

 // Item-Route.js var express= require('express'); var mongoose = require('mongoose'); var router = express.Router(); var Item = mongoose.model('Item '); router.get('/items/:itemId', function(req, res, next){ console.log(req.body); // returns {} Item.find({trip_id: req.body.item_id}, function(err, item){ if(err){console.log(next(err))} console.log(item); // returns [] res.json(item); }); }); module.exports = router; 

任何人都可以发现我在这里做错了吗? 非常感谢! 🙂

作为get方法,你应该像下面那样在url中传递参数

 $http.get('http://localhost:3000/items/'+ $scope.item) 

然后更改服务器方法从URL而不是正文读取参数。

 router.get('/items/:itemId', function(req, res, next){ console.log(req.body); // returns {} Item.find({trip_id: req.itemId}, function(err, item){ if(err){console.log(next(err))} console.log(item); // returns [] res.json(item); }); }); 

在你的Express后端,我认为你应该从npm得到body-parser到代码中来暴露req.body。

 var app = require('express')(); var bodyParser = require('body-parser'); app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded app.post('/profile', upload.array(), function (req, res, next) { console.log(req.body); res.json(req.body); }); 

上面的代码片段应该在你的主节点代码中,这样所有的Http请求都将具有相同的风险。

请在req.body部分参考http://expressjs.com/en/api.html

包含请求正文中提交的键值对数据。 默认情况下,它是未定义的,并且在使用body-parser和multer等身体分析中间件时被填充。