A NestJS module for integrating Drizzle ORM with PostgresJS driver
npm install @knaadh/nestjs-drizzle-postgres
A NestJS module for integrating Drizzle ORM with PostgresJS driver
bash
npm install @knaadh/nestjs-drizzle-postgres drizzle-orm postgres
`
Usage
Import the DrizzlePostgresModule module and pass an options object to initialize it. You can pass options object using the usual methods for custom providers as shown below:
`typescript
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import * as schema from '../db/schema';
import { DrizzlePostgresModule } from '@knaadh/nestjs-drizzle-postgres';
@Module({
imports: [
// Method #1: Pass options object
DrizzlePostgresModule.register({
tag: 'DB_DEV',
postgres: {
url: 'postgres://postgres:@127.0.0.1:5432/drizzleDB',
},
config: { schema: { ...schema } },
}),
// Method #2: useFactory()
DrizzlePostgresModule.registerAsync({
tag: 'DB_PROD',
useFactory() {
return {
postgres: {
url: 'postgres://postgres:@127.0.0.1:5432/drizzleDB',
},
config: { schema: { ...schema } },
};
},
}),
// Method #3: useClass()
DrizzlePostgresModule.registerAsync({
tag: 'DB_STAGING',
useClass: DBConfigService,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
`
`typescript
export class DBConfigService {
create = () => {
return {
postgres: {
url: 'postgres://postgres:@127.0.0.1:5432/drizzleDB',
},
config: { schema: { ...schema } },
};
};
}
`
You can inject the Drizzle instances using their respective tag specified in the configurations
`typescript
import { Inject, Injectable } from '@nestjs/common';
import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
import * as schema from '../db/schema';
@Injectable()
export class AppService {
constructor(
@Inject('DB_DEV') private drizzleDev: PostgresJsDatabase,
@Inject('DB_PROD') private drizzleProd: PostgresJsDatabase
) {}
async getData() {
const books = await this.drizzleDev.query.books.findMany();
const authors = await this.drizzleProd.query.authors.findMany();
return {
books: books,
authors: authors,
};
}
}
`
Configuration
A DrizzlePostgresModule option object has the following interface:
`typescript
export interface DrizzlePostgresConfig {
postgres: {
url: string;
config?: Options>> | undefined;
};
config?: DrizzleConfig | undefined;
}
`
- postgres.url: postgres url connection string
- (optional) postgres.config: Postgres.js driver options
- (optional) config:` DrizzleORM configuration