loopback-boot/docs/configuration.md

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.

  1. Move all Model-definition metadata from models.json to new per-model json files in models/ directory.

models/car.json

  {
    "name": "car",
    "properties": {
      "color": "string",
    }
  }

models.json

  {
    "car": {
      "dataSource": "db"
    }
  }
  1. 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
  };
  1. Add a new file models/index.js to build all models:

models/index.js

  exports.Car = require('./car');
  1. 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" }
}