MongoDB GET请求什么都不返回

时间:2017-11-20 05:06:26

标签: node.js mongodb amazon-ec2

我在Amazon EC2实例上使用NodeJS + Forever运行MongoDB数据库。 (可在此处找到MongoDB和NodeJS代码https://github.com/WyattMufson/MongoDB-AWS-EC2)。我在本教程后面的EC2实例上安装了Mongo:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

当我跑步时:

curl -H "Content-Type: application/json" -X POST -d '{"test":"field"}' http://localhost:3000/data

POST返回:

{
   "test": "field",
   "created_at": "2017-11-20T04:52:12.292Z",
   "_id": "5a125f7cead7a00d5a2593ec"
}

但是这个GET:

curl -X GET http://localhost:3000/data

返回:

[]

我的dbpath设置为/data/db/,运行时没有权限问题。

为什么POST请求有效,但不是GET?

1 个答案:

答案 0 :(得分:4)

您正在使用的Node应用程序存在许多问题和潜在问题。我想您可以开始修复/更新这些问题或找到另一个MEAN应用程序示例,具体取决于您最终要完成的任务。

其中一个明显的问题是collectionDriver.js没有正确地将错误传递回回调,它正在传递null而不是错误。这出现在6个不同的地方,但特别是(基于您的示例POST){46}和第47行的here

the_collection.insert(obj, function() { //C
callback(null, obj);

应该是(有一些额外的控制台记录以获得良好的衡量标准):

the_collection.insert(obj, function(err, doc) { //C
console.error("insert error: %s", err.message);
callback(err, doc);

如果您进行了这些更改,您几乎肯定会发现您的POST实际上正在返回MongoError。然后你可以继续寻找和解决下一组问题。

您可能会发现的一个错误/问题是该项目正在使用真正旧版本的MongoDB Node.js驱动程序,并且您发现在修复错误处理时可能会发现此错误:

  

驱动程序与此服务器版本不兼容

修复这将需要一些额外的工作,因为在最近的2.x驱动程序中存在一些API更改,这将需要支持更多当前版本的MongoDB(例如3.2或3.4)。见Node.js Driver Compatibility