Strongloop应用程序不加载本地数据源

San*_*rea 10 javascript json strongloop loopbackjs

我想在Strongloop应用程序中使用不同的特定于环境的数据源配置.我在https://docs.strongloop.com/display/public/LB/Environment-specific+configuration上看到配置的优先级是:

  1. 特定环境的配置,基于NODE_ENV的值; 例如,server/config.staging.json.
  2. 本地配置文件 ; 例如,server/config.local.json.
  3. 默认配置文件 ; 例如,server/config.json.

我已经声明了三个数据源配置文件: datasources.json:

{}
Run Code Online (Sandbox Code Playgroud)

datasources.local.json:

{
  "db": {
    "name": "db",
    "connector": "loopback-connector-mongodb",
    "host":"127.0.0.1",
    "port": "27017",
    "database": "woowDev"
  }
}
Run Code Online (Sandbox Code Playgroud)

datasources.staging.js:

module.exports = {
  db: {
    connector: 'mongodb',
    hostname: process.env.OPENSHIFT_MONGODB_DB_HOST,
    port: process.env.OPENSHIFT_MONGODB_DB_PORT,
    user: process.env.OPENSHIFT_MONGODB_DB_USERNAME,
    password: process.env.OPENSHIFT_MONGODB_DB_PASSWORD,
    database: 'woow'
  }
};
Run Code Online (Sandbox Code Playgroud)

现在,除非我在datasources.json中放置datasources.local.json的配置,否则它不起作用.我一直收到错误:AssertionError: User is referencing a dataSource that does not exist: "db"

我还尝试将本地conf添加到staging conf并定义变量NODE_ENV,但它不会加载datasource.staging.js.我通过这样做来定义NODE_ENV:

export NODE_ENV=staging
Run Code Online (Sandbox Code Playgroud)

San*_*rea 9

我使用node-debug来追踪问题.它来自这个特定的源strongloop文件:

node_modules/loopback-boot/lib/config-loader.js
Run Code Online (Sandbox Code Playgroud)

功能:

function mergeDataSourceConfig(target, config, fileName) {
  for (var ds in target) {
    var err = applyCustomConfig(target[ds], config[ds]);
    if (err) {
      throw new Error('Cannot apply ' + fileName + ' to `'  + ds + '`: ' + err);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果"db"未在主文件中定义密钥,则不会合并配置datasources.json.

所以,我刚修改datasources.json为:

{
  "db": {}
}
Run Code Online (Sandbox Code Playgroud)

它工作了!

也许这是我的错,但文档不够清晰.

  • 它在文档中的编写方式并不是很明显,但实际上你只能覆盖参数,而不是在备用配置中创建它们`你可以**覆盖在config.json中******的**值: config.local.js或config.local.json config.env.js或config.env.json,其中env是NODE_ENV的值 (2认同)