我想在Strongloop应用程序中使用不同的特定于环境的数据源配置。我在https://docs.strongloop.com/display/public/LB/Environment-specific+configuration看到配置的优先级是:
我已经声明了三个数据源配置文件: 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.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
答案 0 :(得分:9)
我使用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);
}
}
}
如果未在主文件"db"
中定义datasources.json
密钥,将不会合并配置。
所以,我刚刚将datasources.json
修改为:
{
"db": {}
}
它有效!
也许这是我的错,但文档不够明确。
答案 1 :(得分:0)
Trick是在datasources.json中添加所有数据源(memory / redis / mongo / postgres),然后覆盖datasources.local.js或datasources.staging.js或datasources.production.js中的参数
示例文件配置:
<强> datasources.json 强>
{
"db": {
"name": "db",
"connector": "memory"
},
"redisDS": {
"name": "redisDS",
"connector": "redis"
},
"testPostgress": {
"port": 5432,
"name": "localPostgress",
"user": "akumar",
"connector": "postgresql"
}
}
<强> datasources.staging.js 强>
module.exports = {
db:{
connector: 'memory'
},
redisDS:{
connector: 'redis'
},
testPostgress:{
database:'stagingPostgress'
}
};
在这种情况下,Loopback将覆盖数据库名称,类似地,您可以覆盖其他数据源参数,如port和user