【问题标题】:Invalid schema for mongodbmongodb 的架构无效
【发布时间】:2016-02-17 00:07:36
【问题描述】:

我使用 loopback 设置 API,在本地访问 mongodb。一切顺利,一切正常。然后我尝试将其移至 bluemix。当我进入 slc arc 的步骤并使用作曲家时,每次我尝试检查数据库连接时,都会收到一条错误消息,提示“无效的架构,预期的 mongodb”。

这是来自 strongloop 作曲家的完整错误:

Oops! Something is wrong
invalid schema, expected mongodb

Message: invalid schema, expected mongodb
Request: /workspace/api/DataSourceDefinitions/server.mongoDB/testConnection
Staus: 500
Error: invalid schema, expected mongodb
    at module.exports (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/url_parser.js:20:11)
    at connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:125:16)
    at Function.MongoClient.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:109:3)
    at MongoDB.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:113:25)
    at Object.initializeDataSource [as initialize] (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:70:26)
    at DataSource.setup (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:332:17)
    at new DataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:109:8)
    at Registry.createDataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/registry.js:349:12)
    at dataSourcesFromConfig (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:415:19)
    at EventEmitter.app.dataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:222:12)

我尝试摆弄 datasources.fig.json,使其看起来与 datasources.json 相同,但这似乎没有任何作用。 (为显示起见省略了细节,替换为[generic]。)

{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "mongoDB": {
    "host": "[appname].mybluemix.net",
    "port": 27017,
    "url": "[appname].mybluemix.net",
    "database": "strongloop",
    "password": "[password]",
    "name": "mongoDB",
    "connector": "mongodb",
    "user": "[username]"
  }
}

最糟糕的是,现在我什至无法在本地运行它!如果我像往常一样尝试 slc run ,我会得到同样的错误。这是控制台输出:

/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/url_parser.js:20
    throw new Error('invalid schema, expected mongodb'); 
    ^

Error: invalid schema, expected mongodb
    at module.exports (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/url_parser.js:20:11)
    at connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:125:16)
    at Function.MongoClient.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:109:3)
    at MongoDB.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:113:25)
    at Object.initializeDataSource [as initialize] (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:70:26)
    at DataSource.setup (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:332:17)
    at new DataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:109:8)
    at Registry.createDataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/registry.js:349:12)
    at dataSourcesFromConfig (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:415:19)
    at EventEmitter.app.dataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:222:12)

没有任何地方告诉我如何解决这个问题,或者是什么原因造成的,我不知道为什么我什至不能在本地运行该应用程序了。出了什么问题,我该如何让这个东西工作?

非常感谢!

【问题讨论】:

    标签: mongodb ibm-cloud strongloop


    【解决方案1】:

    首先,您需要创建一个可通过网络访问的 Mongo 数据库。您可以通过 Compose 尝试 MongoDB。您还可以在本地计算机上显示 MongoDB 实例。

    您的 MongoDB 连接的主机/端口/url 和其他凭证与您的 Bluemix 应用程序 URL 不同。相反,这些凭据应该指向现有的 MongoDB 实例。

    将您的 MongoDB 实例的凭据输入到您的 datasources.json 文件中。无论您的 LoopBack 应用程序是在本地运行还是在 Bluemix 上运行,它都应该能够连接到您的 MongoDB 服务。

    另外,尝试使用 Arc (slc arc) 创建数据库连接;您可以轻松地测试您的 LoopBack 应用程序是否能够使用 Test Connection 按钮访问数据库。

    【讨论】:

    • 感谢您的反馈。 “测试连接”允许您获得有关您是否正确指定凭据的二进制响应。连接失败意味着您的凭据不正确;在您的情况下,您的凭证不是指 MongoDB 实例,而是指 Bluemix 应用程序。这将允许您在推送到 Bluemix 之前识别错误的凭证。我不明白从头开始构建如何解决您的问题,因为您仍然无法使用不正确的凭据连接到 Bluemix 上的 MongoDB 实例。
    • 网址应该类似于mongodb://host:port/db
    • 从头开始构建解决了两个问题:它让我看到了隐藏在引擎盖下的环回,它让我减少了环回的大量开销。我的意思是,我刚刚在一次上传时用尽了我的免费 2gig。我喜欢 Bluemix 的想法,但从用户的角度来看,它和 Strongloop(尤其是 Strongloop)还有很长的路要走。现在,我会坚持使用 heroku 和 from-scratch express。不过感谢您的帮助!
    猜你喜欢
    • 2016-06-19
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多