【发布时间】:2017-08-01 18:27:30
【问题描述】:
我目前正在做一个小组项目。我们正在使用 MEAN 堆栈创建一个简单的 Web 应用程序,但在从 mongo 数据库返回数据时遇到了一些问题。
我们正在尝试返回存储在 mongo db(托管在 mongolab)中的集合中的所有文档,但在检索数据时遇到了问题。
我们在节点服务器中使用以下 Mongoose 代码来创建我们的架构:
var challengeSchema = mongoose.Schema({
name: String,
description: String,
difficulty: Number,
numberOfTimesCompleted: Number,
comments: [{user: String, body: String, date: Date }]
});
var Challenge = mongoose.model('Challenge', challengeSchema);
使用此架构,一个名为“挑战”的集合被添加到数据库中。
虽然我们在将文档添加到集合中没有任何困难,但当我们尝试从该集合中返回所有文档时,没有任何返回(超时)。
这是我们目前用来查询数据库的代码:
exports.getChallenges = function (req, res){
var challengeList = {};
Challenge.find(function (err, Challenge) {
if (err)
challengeList = Challenge;
console.log(Challenge);
res.send(challengeList);
});
};
我们认为这个问题与集合被称为“挑战”而我们的模型被称为“挑战”这一事实有关。在玩了一段时间的代码后,我们无法取得太大进展。
有什么想法我们可能做错了吗?我们所有人都是 mongo 和 node 的新手,感觉我们很可能犯了一个简单的错误。非常感谢!
【问题讨论】:
-
"没有返回" - 你的意思是
res.send永远不会成功完成吗?challengeList是标准 js 对象还是 Mongoose 对象? -
Res.send 永远不会完成($http GET 请求最终会超时),并且没有任何内容记录到控制台。 ChallengeList 是一个标准的 JavaScript 对象。
-
您将第二个
find回调参数 (Challenge) 命名为与您的对象相同的原因是什么?例如有什么理由不改用Challenge.find(function(err, chall)或类似方法吗? -
不,这是一个任意分配(可能是一个错误的选择)。用“挑战”代替它似乎没有效果。
-
啊,我找到了问题所在。而现在我觉得自己很愚蠢。我只需要处理我所做的 if (err) 语句(删除它或使其记录或以其他方式处理它)。这样做之后,一切都像魅力一样。很抱歉浪费您的时间杰夫!不过非常感谢您的帮助!
标签: angularjs node.js mongodb mongoose database