Node.js从MongoDB获取请求返回undefined
我试图build立一个小型的networking应用程序,因为我试图学习平均值的web开发。
我有一个名为“contactlist”的集合正在运行的MongoDB,这个列表将被一个Node.js/Express.js
服务器访问,以将信息检索到JSON对象并通过angular度控制器传递。
var express = require('express'); var mongojs = require('mongojs'); var db = mongojs('contactlist', ['contactlist']); var app = express(); const port = 80; app.use(express.static(__dirname + "/public")); app.get('/contactlist', function(req, res){ console.log("I received a GET request") db.contactlist.find(function(err, docs){ console.log("Getting data from db"); console.log(docs); res.json(docs); }); console.log("Returned data"); }); app.listen(port,'0.0.0.0'); console.log('Server running on port '+port);
包含控制器的代码
var myApp = angular.module('myApp',[]); myApp.controller('AppCtrl',['$scope','$http',function ($scope,$http){ console.log("Hello World") console.log("Getting data from server") $http.get('/contactList').success(function(response){ console.log("I got the data I requested"); $scope.contactList = response; }) }]);
从服务器login:
C:\Users\savila\Documents\Code\contactListApp>node server Server running on port 80 I received a GET request Returned data Getting data from db undefined
看来以前所有的海报都错误地认为你使用的是标准的mongodb
驱动程序包,而不是你的node
。 根据mongojs
文档,调用只有一个callbackfind
是有效的。 它会给你一个集合中的所有文件的数组,你不需要传入一个空的对象,如以前所build议的。
老实说,通过阅读mongojs
文档,我会build议不要使用这个软件包,正如我对你的问题的评论所解释的那样。 他们的文档在某些地方有些混乱,他们真的只是重新发明,因为mongodb
软件包已经提供了您需要的function,等等。
有一件事你是错过了,你需要检查你的find
callback中的错误。 下面是我将如何重构代码。 这可能无法解决您的问题,但至less会logging到您的控制台,您得到了什么错误,这可能是发生了什么事情。
app.get('/contactlist', function(req, res){ console.log("I received a GET request"); db.collection('contactlist').find(function(err, docs){ console.log("Getting data from db"); /* You need to check for errors here. If there is an error in retreiving your data, docs will be undefined */ if (err) { console.log('error from mongodb', err); res.send('error retrieving data') // or however else you want to handle your error } else { console.log('docs from mongodb', docs); res.json(docs); console.log("Returned data"); } }); });
另外,在你的angular码中,你可能想说$scope.contactList = response.data;
。 根据$ http文档 ,响应对象的数据字段将携带从服务器返回的数据,而响应对象本身包含附加信息,如状态,标题等。
希望这可以帮助。 如果您有任何问题或需要澄清,请发表评论。 学习MEAN堆栈,祝你好运。
另外,为了您的利益,这里是mongojs文档和mongodb文档 ,再次,我会build议使用后者。
这可能是您与mongo
数据库的连接没有build立或其他几个可能的问题,但主要问题是没有传递query object
传递空查询对象{}
以获取所有项目或select特定的logging传递,如{'key':data'}
db.contactlist.findOne({},function(err, docs){ console.log("Getting data from db"); console.log(docs); res.json(docs); });
您没有传递query
对象
传递空查询对象{}
以获取所有项目
find query
语法
db.collection.find(查询,投影)
检查文档查找查询find()
app.get('/contactlist', function(req, res){ console.log("I received a GET request") db.contactlist.find({},function(err, docs){ console.log("Getting data from db"); console.log(docs); res.json(docs); }); console.log("Returned data"); });