3.4 KiB
Configuration and conventions
Model Definitions
The following is example JSON for two Model
definitions:
"dealership" and "location".
{
"dealership": {
// a reference, by name, to a dataSource definition
"dataSource": "my-db",
// the options passed to Model.extend(name, properties, options)
"options": {
"relations": {
"cars": {
"type": "hasMany",
"model": "Car",
"foreignKey": "dealerId"
}
}
},
// the properties passed to Model.extend(name, properties, options)
"properties": {
"id": {"id": true},
"name": "String",
"zip": "Number",
"address": "String"
}
},
"car": {
"dataSource": "my-db"
"properties": {
"id": {
"type": "String",
"required": true,
"id": true
},
"make": {
"type": "String",
"required": true
},
"model": {
"type": "String",
"required": true
}
}
}
}
Migrating from 1.x to 2.x
Starting point: a sample 1.x project
models.json
{
"car": {
"properties": {
"color": "string",
},
"dataSource": "db"
}
}
models/car.js
var app = require('../app');
var Car = app.models.Car;
Car.prototype.honk = function() {
// make some noise
};
app.js
var loopback = require('loopback');
var boot = require('loopback-boot');
var app = loopback();
boot(app, __dirname);
Model definitions & configurations
The 2.x version of loopback-boot no longer creates Models, it's up to the developer to create them before booting the app.
The folder models/
has a different semantincs in 2.x than in 1.x. Instead
of extending Models already defined by app.boot
and models.json
,
it is an encapsulated component that defines all Models independently of
any application that may use them.
Perform the following steps to update a 1.x project for loopback-boot 2.x. All code samples are referring to the sample project described above.
- Move all Model-definition metadata from
models.json
to new per-model json files inmodels/
directory.
models/car.json
{
"name": "car",
"properties": {
"color": "string",
}
}
models.json
{
"car": {
"dataSource": "db"
}
}
- Change per-model javascript files to build and export the Model class:
models/car.js
var loopback = require('loopback');
var Car = module.exports = loopback.createModel(require('./car.json'));
Car.prototype.honk = function() {
// make some noise
};
- Add a new file
models/index.js
to build all models:
models/index.js
exports.Car = require('./car');
- Modify the main application file to load model definitions before booting the application.
var loopback = require('loopback');
var boot = require('loopback-boot');
require('./models');
var app = loopback();
boot(app, __dirname);
Attaching built-in models
Models provided by LoopBack, such as User
or Role
, are no longer
automatically attached to default data-sources. The data-source configuration
entry defaultForType
is silently ignored.
You have to explicitly configure all built-in models used by your application
in the models.json
file.
{
"Role": { "dataSource": "db" }
}