@knaadh/nestjs-drizzle-mysql2
v1.2.0
Published
A NestJS module for integrating Drizzle ORM with MySQL2 driver
Downloads
1,254
Maintainers
Readme
Table of Contents
Installation
npm install @knaadh/nestjs-drizzle-mysql2 drizzle-orm mysql2
Usage
Import the DrizzleMySqlModule module and pass an options
object to initialize it. You can pass options
object using the usual methods for custom providers as shown below:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import * as schema from '../db/schema';
import { DrizzleMySqlModule } from '@knaadh/nestjs-drizzle-mysql2';
@Module({
imports: [
// Method #1: Pass options object
DrizzleMySqlModule.register({
tag: 'DB_DEV',
mysql: {
connection: 'client',
config: {
host: '127.0.0.1',
user: 'root',
database: 'drizzleDB',
},
},
config: { schema: { ...schema }, mode: 'default' },
}),
// Method #2: useFactory()
DrizzleMySqlModule.registerAsync({
tag: 'DB_PROD',
useFactory() {
return {
mysql: {
connection: 'client',
config: {
host: '127.0.0.1',
user: 'root',
database: 'drizzleDB',
},
},
config: { schema: { ...schema }, mode: 'default' },
};
},
}),
// Method #3: useClass()
DrizzleMySqlModule.registerAsync({
tag: 'DB_STAGING',
useClass: DBConfigService,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
export class DBConfigService {
create = () => {
return {
mysql: {
connection: 'client',
config: {
host: '127.0.0.1',
user: 'root',
database: 'drizzleDB',
},
},
config: { schema: { ...schema }, mode: 'default' },
};
};
}
You can inject the Drizzle instances using their respective tag
specified in the configurations
import { Inject, Injectable } from '@nestjs/common';
import * as schema from '../db/schema';
import { MySql2Database } from 'drizzle-orm/mysql2';
@Injectable()
export class AppService {
constructor(
@Inject('DB_DEV') private drizzleDev: MySql2Database<typeof schema>,
@Inject('DB_PROD') private drizzleProd: MySql2Database<typeof schema>
) {}
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 DrizzleMySqlModule option
object has the following interface:
export interface DrizzleMySqlConfig {
mysql: {
connection: 'client' | 'pool';
config: ConnectionOptions | PoolOptions | string;
};
config: MySql2DrizzleConfig<any> | undefined;
}
mysql.connection:
singleclient
connection or apool
as mentioned here- (optional)
mysql.config:
pass client config or pool config according to the connection - (required)
config:
DrizzleORM MySQL2 configuration. You need to specify mode as documented here
Documentation
License
This package is MIT licensed.