【问题标题】:MongoDB GET request returning nothingMongoDB GET 请求不返回任何内容
【发布时间】:2018-05-03 06:43:10
【问题描述】:

我在 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 无效?

【问题讨论】:

  • 您的 get 请求到底是什么样的?
  • 获取请求为:curl -X GET localhost:3000/data
  • 如果你在帖子之后运行 get,那么我必须承认,我不知道可能出了什么问题。看起来它应该工作。您能否使用 shell 或 robomongo 等客户端确认这些值是否在数据库中?
  • 在 mongo 控制台中 db.getCollectionNames 返回 []
  • 文档似乎没有保存。你可以运行帖子,然后立即执行shell命令

标签: node.js mongodb amazon-ec2


【解决方案1】:

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

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

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

【讨论】:

  • 老实说,我不确定这是否能解决问题 - 但看起来肯定会。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2014-01-29
  • 2016-03-03
相关资源
最近更新 更多