StrongLoop Loopback' Datasource'有哪些属性?宾语?

时间:2017-05-25 16:03:17

标签: loopbackjs strongloop loopback

我正在开发一个自定义启动脚本,它将仅为我的一些Loopback模型自动更新(同步数据库到环回模型)(以便不会覆盖我无意中连接到的数据库上其他应用程序/开发人员所做的架构更改)。

现在我在我的bootscript中使用以下内容来获取每个连接数据源的数据源对象:

var postgres = app.dataSources.AWSPostgres;

我希望能够从上述对象中获取的两条数据是:

  1. 数据源(String)的名称
  2. 存储在该DataSource(Array)
  3. 中的模型数组
      

    问题是我无法找到任何文档引用到各个dataSource对象的属性。

    如果我可以从上面的对象中获取dataSource的名称(在示例中,名称将是' AWSPostgres')那么我可以创建一个我想要的数据源数组可用于Autoupdate,从而免除我不想覆盖现有架构的数据源。

2 个答案:

答案 0 :(得分:0)

所以我能够使用以下代码列出单个数据源连接器对象的属性:

console.log("Show properties... ", Object.keys(datasource.connector));

Loopback数据源连接器的属性

[' _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