在 Loopback 文档Initializing the application中,说了两件事:
第一的 :
Loopback.boot() 根据json定义文件,或者给定选项加载数据源和模型,然后,从models/和boot/目录加载所有js文件
然后 :
“不要在多个文件中组合使用 app.boot() 和 app.model(name, config),因为这可能会导致模型由于竞争条件而未定义。为避免在使用 app.boot() 时出现这种情况,请确保所有模型作为模型定义的一部分传递。”
两者看起来不矛盾吗?
我有许多模型要定义,我不想在一个巨大的json
文件中定义,因此想js
在所述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
}
它不起作用,Loopback抛出Class not found
异常。
我也想过使用app.model()
而不是Model.extend()
,但我不知道如何访问app
所需的模型js
文件。
问题:如何在models/
目录中定义模型并仍然将它们附加到应用程序、数据源和 REST API,同时仍然依赖所有boot()
机制?