如何:将node.js mongodb结果传递给angularjs?
所以我有一个使用Node.js查询的MongoDB 。
数据没有被发送出去使用这个function,我不知道什么是错的
var findIco = function(db, callback) { var cursor =db.collection('footIco').find(); cursor.each(function(err, doc) { // console.log(err); if (doc != null) { console.log(doc); <------ DISPLAY THE DATA IN THE CONSOLE } else { callback(); } }); }; app.get('/icons', function(req, res){ //calling the function MongoClient.connect(url, function(err, db) { if(err) { console.log(err); return res.status(500).send(err); } findIco(db, function(icons) { res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type"); console.log(icons);<--------------- IS UNDEFINED res.json(icons); db.close(); return; }); }); }); app.listen(8080);
我究竟做错了什么?
您需要使用某种forms的Web服务器来创build一个API,以便在某个资源收到请求时返回这些数据。 您可以使用Angular应用程序中的$http
服务向您的API发送请求。 对于一个Node web框架来说,最stream行的select是Express ,它包装了Node Core HTTP模块并提供了一个强大的API 。
其他热门Node.js Web框架
- 兴亚
- Hapi.js
这些只是一些Node.js Web框架,我也排除了任何基于MVC框架的框架,比如Meteor和Sails.js,因为Angular已经提供了这个框架。
要在Express中快速启动并运行,您可以使用Express-Generator来搭build基本的Express API。 然后在你的Node.js服务器上添加一个你的函数的路由。
findIco
var findIco = function(db, callback) { db.collection('footIco').find().toArray(function(err, docs) { if (err) return callback(err, null); return callback(null, docs); }); }
Node.js API
app.get('/icons', function getIcons(req, res){ //calling the function MongoClient.connect(url, function(err, db) { if(err) { console.log(err); return res.status(500).json(err); } findIco(db, function(err, icons) { if (err) res.status(500).json(err); else { if (!icons) res.status(204).send(); else res.json(icons); } db.close(); return; }); }); });
在footIconCtrl
调用$http
app.controller('footIconCtrl', ['$scope', '$http', function($scope, $http){ $scope.icons = []; $http({ method: 'GET', url: 'http://<serverAddress>:<serverPort>/icons' }) .then(function(icons) { $scope.icons = icons.data; }) .catch(function(errRes) { // Handle errRess }); });
在你的angular码中,你将得到一个像getDocument.controller.js
这样的文件,带有一个http调用你的服务的函数。 像这样的东西:
var getDocs = function(){ var apis = http://localhost:9000/api/getDocs; httpRequest.get(apis). then(function(docs){ // Your code to handle the response }); };
现在在你的服务器端代码中,你可以发送响应
CollectionName.find({}, function (err, docs) { if (err) return next(err); if (!docs) return res.send(401); res.json(docs); });