Skip to main content

Setup

Objection Setup

info

Incase, you want to use objection package in your application (if you are not using this boilerplate), you can do so by install @squareboat/nestjs-objection package seperately.

npm i @squareboat/nestjs-objection --save

To register ObjectionModule with your app, import the module inside AppModule.

Static Registration

StorageModule is added to global scope by default.

info

The configuration objection of database is same as knexfile.js configuration only.

import { Module } from "@nestjs/common";
import { ObjectionModule } from "@squareboat/nestjs-objection";

@Module({
imports: [
ObjectionModule.register({
isGlobal: true,
default: "postgres",
connections: {
postgres: {
client: "pg",
debug: !!+process.env.DB_DEBUG,
connection: {
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
database: process.env.DB_DATABASE,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
charset: "utf8",
},
},
},
}),
],
controllers: [],
providers: [],
})
export class AppModule {}

Use ConfigModule provided by NestJS to load configurations. To learn about ConfigModule, click here.

1. Create database.ts file

import { registerAs } from "@nestjs/config";

export default registerAs("db", () => ({
isGlobal: true,
default: "postgres",
connections: {
postgres: {
client: "pg",
debug: !!+process.env.DB_DEBUG,
connection: {
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
database: process.env.DB_DATABASE,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
charset: "utf8",
},
validateQuery: 'select 1'
},
},
}));

2. Register ConfigModule

import { Module } from "@nestjs/common";
import database from "@config/database";
import { ConfigModule } from "@nestjs/config";

@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
expandVariables: true,
load: [database],
}),
],
controllers: [],
providers: [],
})
export class AppModule {}

#3. Register Async StorageModule Add following snippet to the imports array. ConfigService is importable from @nestjs/config module.

ObjectionModule.registerAsync({
imports: [ConfigService],
useFactory: (config: ConfigService) => {
return config.get("db");
},
inject: [ConfigService],
});

Once the setup is done, you can retrieve connection instances of knex using the following approach.

import {
CustomQueryBuilder,
ObjectionService,
} from "@squareboat/nestjs-objection";
const connection = ObjectionService.connection("postgres");

Wooho! If you are here then it means that you have successfully configured @squareboat/nestjs-objection package.