我想在Strongloop应用程序中使用不同的环境特定的数据源配置.我在
https://docs.strongloop.com/display/public/LB/Environment-specific+configuration看到配置的优先级是:
>环境特定的配置,基于NODE_ENV的值;
例如server / config.staging.json.
>本地配置文件;
例如server / config.local.json.
>默认配置文件;
例如server / config.json.
我已经声明了三个数据源conf文件:
datasources.json:
{}
datasources.local.json:
{ "db": { "name": "db","connector": "loopback-connector-mongodb","host":"127.0.0.1","port": "27017","database": "woowDev" } }
和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' } };
现在除非我将datasources.local.json的配置放在datasources.json中,否则它不起作用.我不断收到错误:AssertionError:用户正在引用一个不存在的数据源:“db”
我也尝试将本地conf添加到staging conf并定义变量NODE_ENV,但它不会加载datasource.staging.js.我通过这样做来定义NODE_ENV:
export NODE_ENV=staging
解决方法
我用
node-debug跟踪这个问题.它来自这个特别的源强力文件:
node_modules/loopback-boot/lib/config-loader.js
功能:
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); } } }
如果在主文件,即datasources.json中未定义“db”键,则不会合并配置.
所以,我刚刚将datasources.json修改为:
{ "db": {} }
它工作!
也许这是我的错,但文件不够清楚.