確認 - StrongLoopでMySQLテーブルを自動作成する




mysql 使い方 (6)

LoopBackはそれを自動移行と呼びます。 これらのリンクを確認して、その用語を検索してください。

LoopBackモデルのレシピ、パート5/5:リレーショナルデータベースとのモデル同期

データソースとコネクタ

MySqlでStrongloopを使用しようとしていますが、MySqlデータベースにテーブルを移行または自動作成する方法を理解できません。

少なくともモデルをMySqlスキーマにエクスポートする方法はありますか、それとも手動でテーブルを作成する必要がありますか?

私はmysqlのデモアプリを試していて、しばらくの間ドキュメントを調べていましたが運が悪かった - http://docs.strongloop.com/display/DOC/MySQL+connector

ありがとうございます。


jduhlsの答えはきれいですが、テーブルに静的データを追加するには少し微調整する必要がありました。 これが私の微調整したバージョンで、単純なSystemSettingsテーブル(id、settingName、settingValue)にデータをロードする例もあります。

var async = require('async');

var SYSTEM_SETTINGS = [
  {
    "settingName": "mustPayInAdvance",
    "settingValue": "false",
  }
];

module.exports = function(app) {
    var path = require('path');
    var models = require(path.resolve(__dirname, '../model-config.json'));
    var datasources = require(path.resolve(__dirname, '../datasources.json'));
    var modelUpdates = [];

    function buildModelListForOperation(){
        Object.keys(models).forEach(function(key) {
            if (typeof models[key].dataSource != 'undefined') {
                if (typeof datasources[models[key].dataSource] != 'undefined') {
                    modelUpdates.push({operation: app.dataSources[models[key].dataSource], key: key});
                }
            }
        });
    }

    function createStaticData() {
        app.models.SystemSettings.create(SYSTEM_SETTINGS, function(err, created) {
            if (err) 
                throw err;
            else
                console.log('Sample data was imported.');
        });
    }

    function processModelsAndData(operationType) {
        buildModelListForOperation();

        // Create all models
        async.each(modelUpdates, function(item, callback) {
            item.operation[operationType](item.key, function (err) {
                if (err) throw err;
                console.log('Model ' + item.key + ' migrated');
                callback();
            });
        }, function (err) {
            if (err) throw err;
            createStaticData();
        });    
    }

    //TODO: change to 'autoupdate' when ready for CI deployment to production
    processModelsAndData('automigrate');
};

app.startメソッドの前にserver.jsファイルに次の行を追加することで、モデルを簡単に移行できます。

app.datasources['mySqlConnection'].automigrate(['orders','customers', 'User', 'ACL'], function(err) {
     console.log(err);
});
  1. 必要に応じてモデルを配列に追加してください。
  2. slc runアプリケーションを実行します。

注意: mySqlConnectionは接続名です。独自の接続名に置き換えてください。


モデルのすべてのMySQLテーブルを更新または作成するには、以下の手順を実行します。

var dataSource = app.dataSources.mysql;       
dataSource.autoupdate(null, function (err) {
    if(err) return cb(err);
    return cb();
});      

私の場合は、MySQLテーブルを手動で作成してからモデルを作成しました。 既存のMySQLテーブルについては、プロパティ名がMySQLフィールドの名前と同じであるモデルを作成します

だからここにMySQLデータベースでStrongLoop LoopBackを使用する私のステップは次のとおりです。

  1. MySQLデータベースとテーブルを作成します(または既存のデータベースを使用します)。
  2. npm install loopback-connector-mysql --saveを使用してMySQLコネクタをインストールします。
  3. MySQLデータベースの詳細をdatasources.jsonファイルに追加します。
  4. slc lb model tablename -iを使用して各テーブルのモデルを作成するか、 models.jsonファイルを編集して手動でプロパティを追加します。 (ドキュメント: http://docs.strongloop.com/display/DOC/Creating+a+LoopBack+application#CreatingaLoopBackapplication-Creatingmodels : http://docs.strongloop.com/display/DOC/Creating+a+LoopBack+application#CreatingaLoopBackapplication-Creatingmodels
  5. プロパティの名前はMySQLフィールドの名前と同じである必要があります(MySQLからJSONデータ型へのマッピングの詳細については、 http://docs.strongloop.com/display/DOC/MySQL+connector#MySQLconnector-MySQLtoJSONtypeshttp://docs.strongloop.com/display/DOC/MySQL+connector#MySQLconnector-MySQLtoJSONtypes参照してください)。

私はこの仕事を達成する簡単な方法を発見しました。 参照リンクは以下のとおりです。

プロトタイプを使うこともできないこともできますが、私の場合は使用しません。

ドキュメンテーションに関しては、使用するべきです:



    ds.autoupdate (models, function (error) {
        if (!error) {
            console.log( "Updated models.");
        }else{
            console.log( "An error has occurred:" + error);
        }
        ds.disconnect();
    });

どこで:



    var path = require ( 'path');
    var app = require (path.resolve (__ dirname, '../server/server'));
    var ds = app.datasources.x;

xはデータソースの属性名です。例:/server/datasources.json:



    {
      "x": {
        "Host": "localhost"
        "Port": 3306,
        "Database", "loopapp"
        "Password": "",
        "Name": "x"
        "User", "root"
        "Connector": "mysql"
      }
    }

注(1): モデルは、文字列モデル名または文字列の配列(モデル名)です。

注(2): モデルを配置したくない場合は、base属性が "PersistedModel"に等しいファイルのすべてのモデルが更新されます。

それで、私はこのように使用しました:

    autoupdate function () {
        ds.autoupdate (function (error) {
          if (!error) {
                console.log( "Updated all models");
          }else {
                console.log( "An error has occurred:" + error);
          }
          ds.disconnect();
        });
    }
    

そして私は: autoupdate()を呼び出しました。

このコードをfile.jsに入れて、コマンドラインを呼び出すことができます。node file.js

プログラムを起動するたびにこのファイルが呼び出されるようにしたい場合は、/ server / boot / file.jsパスに置きます。

当然のことながら、自動マイグレーションを使用したい場合は、上記のコード内の自動更新ワードのみを自動マイグレーションで置き換えてください。







loopbackjs