A component to provide TypeORM in LoopBack 4
DEPRECATED ALPHA: This is an experimental proof of concept showing how to implement a TypeORM mixin for LoopBack 4. The implementation is not currently supported for any production purpose and we are not maintaining this repository any more.
- Install this plugin and some dependencies
npm install --save loopback4-extension-typeorm typeorm
- In your application, make your own Application class, but instead of
extending
Application
, you'll want to call the provided mixin as your base class.
import {Application} from '@loopback/core';
import {TypeORMRepositoryMixin} from 'loopback-typeorm';
export class MyApplication extends TypeORMRepositoryMixin(Application) {
constructor() {
super(...);
}
}
- Create a connection (or multiple!) in your new subclass, and define whatever repositories you'd like to create.
A helpful way to ensure that your configuration has all of the required values
is to import the ConnectionOptions
type from TypeORM directly.
Note: There are connection options that become required within different use cases and contexts. For info on how to configure your database connection, see the TypeORM docs.
import {Application} from '@loopback/core';
import {TypeORMRepositoryMixin} from 'loopback-typeorm';
import {ConnectionOptions} from 'typeorm';
import {Order, Customer} from './models';
export class MyApplication extends TypeORMRepositoryMixin(Application) {
mySqlConnection: Connection;
constructor() {
super();
const connectionOptions: ConnectionOptions = {
name: 'connectionName',
host: 'somehost.com',
database: 'mydb',
port: 3306,
type: 'mysql',
username: 'admin',
password: 'secretpassword',
// etc...
};
this.mySqlConnection = this.createTypeOrmConnection(connectionOptions);
// Automatically uses the connection to bind repositories to
// your application context.
this.typeOrmRepository(this.mySqlConnection, Order);
this.typeOrmRepository(this.mySqlConnection, Customer);
}
}
- Finally, consume your repositories in your controllers!
import {Customer, CustomerSchema} from '../models';
import {Repository} from 'typeorm';
export class CustomerController {
constructor(@inject('repositories.Customer') customerRepo: Repository) {
// ...
}
@get('/customer/{id}')
@param.path.number('id');
async getCustomerById(id: number) {
// Using TypeORM's repository!
return await this.customerRepo.findOneById(id);
}
@post('/customer')
@param.body('customer', CustomerSchema);
async createCustomer(customer: Customer) {
return await this.customerRepo.save(customer);
}
}
To run tests, you'll need an installation of Docker.
npm it