我在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?
答案 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