当我尝试学习MEAN堆栈Web开发时,我正在尝试构建一个小型Web应用程序。
我有一个名为' contactlist'的正在运行的MongoDB,然后Node.js/Express.js
服务器将访问此列表以将信息检索到JSON对象并通过角度控制器传递
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;
})
}]);
从服务器登录:
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
答案 0 :(得分:0)
您没有传递query
对象
传递空查询对象{}
以获取所有项目
find query
db.collection.find(查询,投影)
检查doc查找查询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");
});
答案 1 :(得分:0)
可能是您与mongo
数据库的连接未建立或其他几个可能的问题,但主要问题是未通过query object
将空查询对象{}
传递给获取所有项或选择特定记录
像这样传递{'key':data'}
db.contactlist.findOne({},function(err, docs){
console.log("Getting data from db");
console.log(docs);
res.json(docs);
});
答案 2 :(得分:0)
似乎所有以前的海报都错误地认为您使用mongodb
的标准node
驱动程序包,而您并非如此。根据{{1}}文档,仅使用回调调用mongojs
是有效的。它将为您提供集合中所有文档的数组,并且您不需要传入空对象,如前所述。
老实说,通过阅读find
文档,我建议不要使用该软件包,正如我对您的问题的评论中所述。他们的文档在某些地方有点混乱,实际上它们只是重新发明轮子,因为mongojs
包已经提供了你需要的功能,等等。
但是,您要丢失的一件事是,您需要检查mongodb
回调中的错误。下面是我如何重构代码。这可能无法解决您的问题,但它至少会在您的控制台上记录您遇到的错误,这可能就是发生的事情。
find
此外,在您的角度代码中,您可能想说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");
}
});
});
。根据{{3}},响应对象的数据字段将携带从服务器返回的数据,而响应对象本身包含其他信息,如状态,标题等。
希望这会有所帮助。如果您有任何疑问或需要澄清,请发表评论。祝你好好学习MEAN堆栈。
另外,为了您的利益,这里有$http docs和mongojs docs,我建议再次使用后者。