我正在开发一个自定义启动脚本,它将仅为我的一些Loopback模型自动更新(同步数据库到环回模型)(以便不会覆盖我无意中连接到的数据库上其他应用程序/开发人员所做的架构更改)。
现在我在我的bootscript中使用以下内容来获取每个连接数据源的数据源对象:
var postgres = app.dataSources.AWSPostgres;
我希望能够从上述对象中获取的两条数据是:
问题是我无法找到任何文档引用到各个dataSource对象的属性。
如果我可以从上面的对象中获取dataSource的名称(在示例中,名称将是' AWSPostgres')那么我可以创建一个我想要的数据源数组可用于Autoupdate,从而免除我不想覆盖现有架构的数据源。
答案 0 :(得分:0)
所以我能够使用以下代码列出单个数据源连接器对象的属性:
console.log("Show properties... ", Object.keys(datasource.connector));
[' _models', '名称&#39 ;, '设置&#39 ;, '数据源&#39 ;, '客户机&#39 ;, '登录&#39 ;, '记录器&#39 ;, ' _mixins&#39 ;, '观察&#39 ;, ' removeObserver&#39 ;, ' clearObservers&#39 ;, ' notifyObserversOf&#39 ;, ' _notifyBaseObservers&#39 ;, ' notifyObserversAround' ]
出于我的目的,我能够将名称拉出......等待它...... datasource.connector.name 属性。
对于那些想知道的人, datasource.connector._models 是附加到给定数据源的模型数组。要获得附加到该数据源的每个模型的名称,您可以执行类似的操作(我使用Lodash,我建议):
_.forEach(datasource.connector._models, function(datasourceModel) {
console.log("Model name is... " + datasourceModel.model.modelName);
});
上面循环遍历datasource.connector._models数组中的每个模型,并将modelName记录到控制台,它将为您提供附加到给定数据源的模型列表,该数据源可在Loopback引导脚本中使用。 / p>
答案 1 :(得分:0)
对于想知道我的最终启动脚本是什么样的人(设置为仅在SOME数据源上自动更新所有模型),这是我的完整代码:
var _ = require('lodash');
module.exports = function (app) {
'use strict'
//Define Postgres_Local Datasource and Models
var postgres_local = app.dataSources.LocalPostgres;
//Define Postgres_aws Datasource and Models to AutoUpdate
var postgres_aws = app.dataSources.AWSPostgres;
//Define Mongo Datasource and Models
var mlab_Mongo = app.dataSources.mlab_Mongo;
//Define MySQL Datasource and Models
var mysql = app.dataSources.mysql;
// Only the Datasources listed in this array will have their Models AutoUpdated
var datasources = [postgres_aws, mysql];
console.log('-- Datasources to Autoupdate: ' + datasources.length);
//Loop through all specified datasources and models to autoupdate where necessary
_.forEach(datasources, function(datasource) {
console.log("Working on... " + datasource.connector.name);
var currentDataSource = datasource;
_.forEach(datasource.connector._models, function(datasourceModel) {
console.log("Cheking if table for model " + datasourceModel.model.modelName + " is created and up-to-date in " + datasource.connector.name + " DB.");
currentDataSource.isActual(datasourceModel.model.modelName, function (err, actual) {
if (actual) {
console.log("Model " + datasourceModel.model.modelName + " is up-to-date. No auto-update necessary.");
} else {
console.log('Difference found! Auto-updating model ' + datasourceModel.model.modelName + '...');
currentDataSource.autoupdate(datasourceModel.model.modelName, function () {
console.log("Auto-updated model " + datasourceModel.model.modelName + " in " + datasource.connector.name + " datasource successfully.");
});
}
});
});
});
} // End Exports