2

Loopback のドキュメントInitializing the applicationでは、次の 2 つのことが述べられています。

初め :

Loopback.boot() は、json 定義ファイルまたは指定されたオプションに基づいてデータ ソースとモデルをロードし、 models/およびboot/ディレクトリからすべてのjsファイルをロードします。

それで :

「app.boot() と app.model(name, config) を複数のファイルで組み合わせて使用​​しないでください。競合状態のためにモデルが未定義になる可能性があるためです。 app.boot() を使用するときにこれを回避するには、すべてのモデルを確認してください。モデル定義の一部として渡されます。」

矛盾しているように見えませんか?

json定義するモデルがたくさんありますが、それらを単一の巨大なファイルで定義したくないため、jsモデルごとに 1 つのファイルを上記のmodels/ディレクトリに配置して、起動時にロードする必要があります。

今のところ、私がしたことは、次のmodels/ExampleModel.jsようにモデルを定義することです:

    var properties = {
        fieldOne: { type: String, required: true },
        otherField: { type: Number }
    };

    var options = {
        relations: {
            collections: {
                type: "belongsTo",
                model: "user"
            }
        }
    };

    var Model = require('loopback').Model;
    module.exports = Model.extend('ExampleModel', properties, options);

問題はboot()、モデルは読み込まれますが、アプリやデータソースには接続されません。REST API には公開されません。

models.jsonアプリでモデルを有効にするために、少し追加してみました:

"examplemodel": {
    "options": {
        "base": "ExampleModel"
    },
    "dataSource": "db",
    "public": true
}

機能しません。ループバックは例外をスローしClass not foundます。

app.model()の代わりに使用することも考えましたが、必要なモデルファイルModel.extend()にアクセスする方法がわかりません。appjs

質問: どのようにディレクトリでモデルを定義しmodels/、それらをアプリケーション、データソース、および REST API にアタッチしながら、すべてのboot()メカニズムに依存するのですか?

4

2 に答える 2

9

Model.extend() の代わりに app.model() を使用することも考えましたが、必要なモデルの js ファイルで app.model() にアクセスする方法がわかりません。

を使用してプロジェクトをスキャフォールディングした場合slc lb project、アプリ オブジェクトはメインapp.jsファイルによってエクスポートされる必要があります。

したがって、次の方法で app オブジェクトを取得できます。

// in models/example-model.js
var app = require('../app.js')

app オブジェクトを取得app.modelしたら、正しく指摘したとおりに呼び出すことができます。

var properties = {
  fieldOne: { type: String, required: true },
  otherField: { type: Number }
};

var options = {
    relations: {
        collections: {
            type: "belongsTo",
            model: "user"
        }
    }
};

app.model('ExampleModel', {
  properties: properties, 
  options: options,
  dataSource: 'db' // replace with the correct name
);

// you can access the model now via
//   app.models.ExampleModel
于 2014-02-11T19:17:14.647 に答える