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,等等。

有一件事你是错过了,你需要检查你的findcallback中的错误。 下面是我将如何重构代码。 这可能无法解决您的问题,但至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"); });