12

Loopback に最初のテーブルを見つけて構築させようとしています。ここのページの下部にある簡単な例を使用しました。

http://docs.strongloop.com/display/LB/Database+discovery+API#DatabasediscoveryAPI-ディスカバリによるモデルの構築の例

発見したテーブルの出力が表示されますが、API Explorer にはテーブルや新しく生成されたエンドポイントが表示されません。また、model-config.js ファイルは新しいテーブル オブジェクトで更新されません。サーバーの起動時に実行されるコードの基本セクションは次のとおりです。

var loopback = require('loopback');
var boot = require('loopback-boot');
var DataSource = require('loopback-datasource-juggler').DataSource;
var mysqlSource = require('./datasources.json');
var dataSource = new DataSource('mssql', mysqlSource.mysqlserver);

var app = module.exports = loopback();

// Set up the /favicon.ico
app.use(loopback.favicon());

// request pre-processing middleware
app.use(loopback.compress());

// -- Add your pre-processing middleware here --

dataSource.discoverAndBuildModels('CATS', {owner: 'mamacat'}, function (err, models) {
    models.Cat.find(function (err, cat) {
        if (err) {
            console.error(err);
        } else {
            console.log(cat);
        }
        dataSource.disconnect();
    });
});

// boot scripts mount components like REST API
boot(app, __dirname);

要約すると、これは実行され、エラーはありません。しかし、新しいモデルは表示されませんhttp://localhost:3000/explorer

4

4 に答える 4

12

検出スクリプトは出力のみを表示し、モデル ファイルを作成しないようです。ループバック ドキュメントでいくつかの指示を見つけました。

http://docs.strongloop.com/display/public/LB/Discovering+models+from+relational+databases

セクションBasic Procedureの 2 番目のステップ:

2. fs.writeFile() を使用して、出力を common/models/model-name.json に保存します。

したがって、次のアプローチを試すことができます。

  1. yourloopbackproject/server/datasources.jsonファイルで mysql データをセットアップします。
{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "accountDs": {
    "host": "mysqlServerName",
    "port": 3306,
    "database": "databaseName",
    "username": "username",
    "password": "password!",
    "name": "accountDs",
    "connector": "mysql"
  }
}
  1. models フォルダーが存在しない場合は作成します: yourloopbackproject/common/models

  2. loopbackproject/server/binフォルダーにdiscovery-and-build.jsスクリプトを作成します。

var path = require('path');
var fs = require('fs');
var app = require(path.resolve(__dirname, '../server'));
var outputPath = path.resolve(__dirname, '../../common/models');

var dataSource = app.dataSources.accountDs;

function schemaCB(err, schema) {
  if(schema) {
    console.log("Auto discovery success: " + schema.name);
    var outputName = outputPath + '/' +schema.name + '.json';
    fs.writeFile(outputName, JSON.stringify(schema, null, 2), function(err) {
      if(err) {
        console.log(err);
      } else {
        console.log("JSON saved to " + outputName);
      }
    });
  }
  if(err) {
    console.error(err);
    return;
  }
  return;
};

dataSource.discoverSchema('tableName',{schema:'schemaName'},schemaCB);

このスクリプトは以下に基づいています: http://www.reddit.com/r/strongloop/comments/2upy76/autodiscoveryjs_recipe/

  1. スクリプトの実行後、models フォルダーに .json ファイルが見つかります。基本手順セクション のステップ 3 に進みます: http://docs.strongloop.com/display/public/LB/Discovering+models+from+relational+databases

  2. 次の手順に従って、REST 経由でモデルを公開します: http://docs.strongloop.com/display/public/LB/Exposing+models+over+REST

これが役立つことを願っています!

于 2015-07-09T08:24:09.327 に答える
3

これには Arc を使用します。プロジェクト フォルダから slc arc を実行すると、デフォルト ブラウザに arc という GUI ツールが表示されます。まだ登録していない場合は、サインアップしてログインします。StrongLoop の GUI ツールである Arc に移動します。左ペインのリストからモデルを選択します。保存して移行ボタンが表示されます。移行ボタンをクリックするだけで、テーブルがモデルに作成されます.(ミリ秒以内!)

乾杯!

于 2015-07-19T19:20:34.947 に答える
1

ディスカバリ api は、今のところモデルを作成せずにスキーマを検出するためにのみ使用されます。次のプロジェクトを使用して、1 対 1 および 1 対多の関係を持つモデルとすべてのモデルを作成してください。

https://github.com/savsharma2/loopback-sql-create-model-with-relation/

于 2016-05-27T09:14:33.627 に答える