【问题标题】:How to connect with mongodb using sailsjs v0.10?如何使用sailsjs v0.10连接mongodb?
【发布时间】:2014-03-03 03:05:37
【问题描述】:

现在使用sailsjs v0.10 。 配置connections.js和models.js,改成connection:'localMongodbServer',安装npm installsails-mongo。

这一切都显示错误

 var des = Object.keys(dbs[collectionName].schema).length === 0 ?
                                          ^
TypeError: Cannot read property 'schema' of undefined

at Object.module.exports.adapter.describe (app1_test/node_modules/sails-mongo/lib/adapter.js:70:48)

如果将 collections.js 更改为 adapter.js 显示错误

  [err] In model (model1), invalid connection :: someMongodbServer
  [err] Must contain an `adapter` key referencing the adapter to use.

【问题讨论】:

    标签: node.js mongodb sails.js


    【解决方案1】:

    没有看到代码,我只能假设一些事情。

    1. 您正在启动一个新的sailsjs v0.10 项目
    2. 您的配置设置不正确。

    如果不是这样,请告诉我,以便我可以适当地更新答案。


    我有一个 v0.10 的样板,其中包含一些内容,因此您可以看到它是如何完成的。查看那个 repo here

    connections.js 是适当的文件名,它在0.10 中已更改。

    首先确保安装了sails-mongo。

    #From your project root run
    npm install sails-mongo --save
    

    接下来您需要定义您的连接,并告诉sails 默认使用什么适配器用于模型。这是connections.jsmodels.js 应该是什么样子的示例。

    connections.js

    module.exports.connections = {
      mongodb: {
        adapter   : 'sails-mongo',
        host      : 'localhost',
        port      : 27017,
        user      : '',
        password  : '',
        database  : 'yourdevdb'
      }
    }
    

    models.js

    module.exports.models = {
    
      // Your app's default connection.
      // i.e. the name of one of your app's connections (see `config/connections.js`)
      //
      // (defaults to localDiskDb)
      connection: 'mongodb'
    };
    

    您还可以在config/local.js 中指定您的连接,以避免将敏感数据提交到您的存储库。这就是你的做法。

    您不需要指定所有内容,因为local.js 将覆盖connections.js 中定义的内容,Sails 也会将它们组合起来。

    local.js

    module.exports = {
      connections: {
          mongodb: {
            host      : 'localhost',
            port      : 27017,
            user      : '',
            password  : '',
            database  : 'yourdevdb'
          }
      }
    }
    

    您甚至可以在单个模型中定义您的适配器,例如您需要单个模型来与不同的数据库类型通信。

    您可以通过在模型中指定 adapter: 来做到这一点..

    module.exports = {
      adapter: 'myothermongodb',
    },
    config: {
      user: 'root',
      password: 'thePassword',
      database: 'testdb',
      host: '127.0.0.1'
    },
    

    【讨论】:

    • 这适用于 0.9.11 吗?
    • 谢谢,这对我很有帮助,因为在 0.10.x 上还没有关于此的文档。
    • 如何设置生产数据库?
    【解决方案2】:

    如果您使用的是 v0.10,则需要从 Github 上的 v0.10 分支安装 sails-mongo,因为在 v0.10 中更改了 Waterline 适配器 API。在你的package.json

    "sails-mongo": "https://github.com/balderdashy/sails-mongo/archive/v0.10.tar.gz"
    

    然后运行npm install

    您应该在config/connections.js 中描述了 MongoDB 适配器,并且在您的 config/models.js 中必须引用此适配器。

    就是这样,sails lift 应该在那之后工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多