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