86
loading...
This website collects cookies to deliver better user experience
$ nest new custom-db-project
$ npm install --save @nestjs/typeorm @nestjs/config typeorm mysql2 dotenv
$ nest generate module core/database
export interface IDatabaseConfigAttributes {
username?: string;
password?: string;
database?: string;
host?: string;
port?: number;
type?: string;
urlDatabase?: string;
entities?: string[];
migrationsTableName?: string;
migrations?: string[];
cli?: {
migrationsDir?: string;
}
synchronize?: boolean;
}
export interface IDatabaseConfig {
development: IDatabaseConfigAttributes;
test: IDatabaseConfigAttributes;
production: IDatabaseConfigAttributes;
}
import * as dotenv from 'dotenv';
import { IDatabaseConfig } from './interfaces/dbConfig.interface';
dotenv.config();
let entities = [__dirname + '/**/*.entity{.ts,.js}']
let migrationsDir = 'src/migration';
let migrations = [migrationsDir + '/*.ts']
export const databaseConfig: IDatabaseConfig = {
development: {
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME_DEVELOPMENT,
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
type: process.env.DB_DIALECT,
entities: entities,
migrationsTableName: process.env.DB_MIGRATION_TABLE_NAME,
migrations: migrations,
cli: {
migrationsDir: migrationsDir
},
synchronize: true
},
test: {
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME_TEST,
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
type: process.env.DB_DIALECT,
entities: entities,
migrationsTableName: process.env.DB_MIGRATION_TABLE_NAME,
migrations: migrations,
cli: {
migrationsDir: migrationsDir
},
synchronize: true
},
production: {
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME_PRODUCTION,
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
type: process.env.DB_DIALECT,
entities: entities,
migrationsTableName: process.env.DB_MIGRATION_TABLE_NAME,
migrations: migrations,
cli: {
migrationsDir: migrationsDir
},
synchronize: true
},
};
DB_HOST=localhost
DB_PORT=3306
DB_USER=database_user_name
DB_PASS=database_password
DB_DIALECT=postgres
DB_NAME_TEST=test_database_name
DB_NAME_DEVELOPMENT=development_database_name
DB_NAME_PRODUCTION=production_database_name
DB_MIGRATION_TABLE_NAME=migration
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DatabaseModule } from './core/database/database.module';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
DatabaseModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
import { TypeOrmModule } from '@nestjs/typeorm';
import { TYPEORM ,DEVELOPMENT, TEST, PRODUCTION } from '../constants';
import { databaseConfig } from './database.config';
export const databaseProviders = [{
provide: TYPEORM,
useFactory: async () => {
let config;
switch (process.env.NODE_ENV) {
case DEVELOPMENT:
config = databaseConfig.development;
break;
case TEST:
config = databaseConfig.test;
break;
case PRODUCTION:
config = databaseConfig.production;
break;
default:
config = databaseConfig.development;
}
const typeOrm = TypeOrmModule.forRoot(config);
return typeOrm
},
}];
export const TYPEORM = 'TYPEORM';
export const DEVELOPMENT = 'development';
export const TEST = 'test';
export const PRODUCTION = 'production';