loopback-component-migrate

Migration framework for Loopback.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
loopback-component-migrate
43300.4.06 years ago8 years agoMinified + gzip package size for loopback-component-migrate in KB

Readme

A library to add simple database migration support to loopback projects.
Dependencies
Migrations that have been run will be stored in a table called 'Migrations'. The library will read the loopback datasources.json files based on the NODEENV environment variable just like loopback does. The usage is based on the node-db-migrate project.

Installation

Greenkeeper badge

  1. Install in you loopback project:

npm install --save loopback-component-migrate
  1. Create a component-config.json file in your server folder (if you don't already have one)

  1. Enable the component inside component-config.json.

```json {
"loopback-component-migrate": {
  "key": "value"
}
} ```
Options:
  • log

String : Name of the logging class to use for log messages. (default: 'console')
  • enableRest

Boolean : A boolean indicating wether migrate/rollback REST api methods should be exposed on the Migration model. (default: false)
  • migrationsDir

String : Directory containing migration scripts. (default: server/migrations)
  • dataSource

String : Datasource to connect the Migration and MigrationMap models to. (default: db)
  • acls

Array : ACLs to apply to Migration and MigrationMap models. (default: )

Running Migrations

Migrations can be run by calling the static migrate method on the Migration model. If you do not specify a callback, a promise will be returned.
Run all pending migrations:
Migrate.migrate('up', function(err) {});

Run all pending migrations upto and including 0002-somechanges:
Migrate.migrate('up', '0002-somechanges', function(err) {});

Rollback all migrations:
Migrate.migrate('down', function(err) {});

Rollback migrations upto and including 0002-somechanges:
Migrate.migrate('down', '0002-somechanges', function(err) {});

Example migrations

module.exports = {
  up: function(app, next) {
    app.models.Users.create({ ... }, next);
  },
  down: function(app, next) {
    app.models.Users.destroyAll({ ... }, next);
  }
};

/* executing raw sql */
module.exports = {
  up: function(app, next) {
    app.dataSources.mysql.connector.query('CREATE TABLE `my_table` ...;', next);
  },
  down: function(app, next) {
   app.dataSources.mysql.connector.query('DROP TABLE `my_table`;', next);
  }
};