初级:在 AppModule 直接配置 TypeORM
1. 安装依赖
首先,安装 NestJS、TypeORM 以及 MySQL 驱动:
pnpm install @nestjs/typeorm typeorm mysql2 @nestjs/config2. 创建 .env 文件
在项目根目录下创建 .env 文件,用于存储数据库配置信息:
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=123456
DB_NAME=login_nest
DB_SYNCHRONIZE=false
DB_LOG=true3. 配置 AppModule
在 app.module.ts 中直接配置 TypeORM:
app.module.tsApplyimport { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
import * as path from 'path';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: configService.get<string>('DB_TYPE', 'mysql'),
host: configService.get<string>('DB_HOST', 'localhost'),
port: configService.get<number>('DB_PORT', 3306),
username: configService.get<string>('DB_USERNAME', 'root'),
password: configService.get<string>('DB_PASSWORD', '123456'),
database: configService.get<string>('DB_NAME', 'login_nest'),
entities: [path.join(__dirname, '../common/entities/*.entity{.ts,.js}')],
synchronize: configService.get<boolean>('DB_SYNCHRONIZE', false),
logging: configService.get<boolean>('DB_LOG', true),
autoLoadEntities: true,
}),
}),
// 其他模块
],
// 其他配置
})
export class AppModule {}进阶:抽离 DatabaseModule 单独配置
1. 创建 DatabaseModule
在 src/database 目录下创建 database.module.ts 文件:
database.module.tsApplyimport { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';
import * as path from 'path';
@Module({
imports: [
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: configService.get<string>('DB_TYPE', 'mysql'),
host: configService.get<string>('DB_HOST', 'localhost'),
port: configService.get<number>('DB_PORT', 3306),
username: configService.get<string>('DB_USERNAME', 'root'),
password: configService.get<string>('DB_PASSWORD', '123456'),
database: configService.get<string>('DB_NAME', 'login_nest'),
entities: [path.join(__dirname, '../../common/entities/*.entity{.ts,.js}')],
synchronize: configService.get<boolean>('DB_SYNCHRONIZE', false),
logging: configService.get<boolean>('DB_LOG', true),
autoLoadEntities: true,
}),
}),
],
exports: [TypeOrmModule],
})
export class DatabaseModule {}2. 在 AppModule 中引入 DatabaseModule
修改 app.module.ts 文件:
app.module.tsApplyimport { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { DatabaseModule } from './database/database.module';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
DatabaseModule,
// 其他模块
],
// 其他配置
})
export class AppModule {}进一步:使用自定义命名空间 databaseToken 抽离配置到单独文件
1. 创建数据库配置文件
在 src/config 目录下创建 database.config.ts 文件:
import { registerAs } from '@nestjs/config';
export const databaseToken = 'database';
console.log('数据库类型', process.env.DB_TYPE);
// 使用 registerAs 函数注册自定义命名空间
//registerAs 函数本身不能使用 ConfigService 读取变量,这是由于 NestJS 配置加载的顺序决定的,此处使用process.env
export const databaseConfig = registerAs(databaseToken, () => ({
type: process.env.DB_TYPE,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
entities: [__dirname + '/../../common/entities/*.entity{.ts,.js}'],
synchronize: process.env.DB_SYNCHRONIZE === 'true' || false,
logging: process.env.DB_LOG === 'true' || false,
autoLoadEntities: true,
}));2. 修改 DatabaseModule
database.module.tsApplyimport { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';
import { databaseToken, databaseConfig } from '../config/database.config';
@Module({
imports: [
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService) => {
const dbConfig = configService.get(databaseToken);
return dbConfig;
},
}),
],
exports: [TypeOrmModule],
})
export class DatabaseModule {}3. 在 AppModule 中加载数据库配置
必须在ConfigModule使用 forRoot() 方法的 options 对象的 load 属性加载命名空间配置
app.module.tsApplyimport { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { DatabaseModule } from './database/database.module';
import { databaseConfig } from './config/database.config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [databaseConfig],
}),
DatabaseModule,
// 其他模块
],
// 其他配置
})
export class AppModule {}通过以上三个阶段,可以逐步优化 NestJS 项目中 TypeORM 的配置,让代码结构更清晰,更易于维护。
11 条评论
华纳圣淘沙官网开户入口(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司在线开户教程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙网上开户步骤(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司移动端开户指南183-8890-9465—?薇-STS5099【6011643】
数字化开户:华纳圣淘沙公司指南183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司远程开户解决方案183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙线上开户操作手册183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司快速开户通道(183-8890-9465—?薇-STS5099【6011643】
三分钟搞定华纳圣淘沙公司开户
(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司极速开户攻略(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙开户流程提速秘籍(183-8890-9465—?薇-STS5099【6011643】
如何快速完成华纳圣淘沙公司注册(183-8890-9465—?薇-STS5099【6011643】
东方明珠客服开户联系方式【182-8836-2750—】?μ- cxs20250806
东方明珠客服电话联系方式【182-8836-2750—】?- cxs20250806】
东方明珠开户流程【182-8836-2750—】?薇- cxs20250806】
东方明珠客服怎么联系【182-8836-2750—】?薇- cxs20250806】
新盛客服电话是多少?(?183-8890-9465—《?薇-STS5099】【
新盛开户专线联系方式?(?183-8890--9465—《?薇-STS5099】【?扣6011643??】
新盛客服开户电话全攻略,让娱乐更顺畅!(?183-8890--9465—《?薇-STS5099】客服开户流程,华纳新盛客服开户流程图(?183-8890--9465—《?薇-STS5099】
华纳客服开户电话全攻略,让娱乐更顺畅!(?183-8890--9465—《?薇-STS5099】
新盛开户前客服电话咨询材料清单【1558--7291-507薇同1】
新盛开户官方客服电话 【1558--7291-507 薇同1】
新盛开户业务办理电话 【1558--7291-507 薇同1】
新盛开户联系电话大全 【1558--7291-507 薇同1】
新盛开户前客服电话咨询材料清单【1558--7291-507薇同1】
新盛开户官方客服电话 【1558--7291-507 薇同1】
新盛开户业务办理电话 【1558--7291-507 薇同1】
新盛开户联系电话大全 【1558--7291-507 薇同1】
华纳东方明珠客服电话是多少?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
华纳东方明珠开户专线联系方式?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠开户专线联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服热线?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠开户客服电话?(▲182(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服微信?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳公司开户注册流程?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】