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.