连接数据库
pnpm add lodash mysql2 typeorm @nestjs/typeorm sanitize-html deepmerge
pnpm add @types/sanitize-html -D
rm -rf src/modules/core src/modules/example src/modules/content/types.ts src/modules/content/dtos src/app.controller.spec.ts src/app.controller.ts src/app.service.ts
nest g mo modules/core
nest g mo modules/database
res content
tip: res = nest g res
import { DynamicModule, Module } from '@nestjs/common';
@Module({})
export class CoreModule {
static forRoot(): DynamicModule {
return {
module: CoreModule,
global: true,
providers: [],
exports: [],
};
}
}
创建一个DynamicModule通常涉及到以下几个步骤:
- 首先,你需要导入
DynamicModule和Module这两个类,分别来自@nestjs/common包。 - 然后,你需要创建一个
DynamicModule实例,并传入一个包含所有服务的数组。这些服务可以是静态的,也可以是动态的。 - 最后,你需要调用
DynamicModule的register()方法,将这个模块注册到Nest的服务容器中。
在Nest框架中,forRoot()方法用于初始化一个模块,它支持TypeORM包中createConnection()函数公开的所有配置属性
import { Module } from '@nestjs/common';
import { ContentModule } from './modules/content/content.module';
import { CoreModule } from './modules/core/core.module';
import { DatabaseModule } from './modules/database/database.module';
import { PersonController } from './modules/person/person.controller';
import { PersonModule } from './modules/person/person.module';
import { PersonService } from './modules/person/person.service';
@Module({
imports: [PersonModule, ContentModule, CoreModule.forRoot(), DatabaseModule],
controllers: [PersonController],
providers: [PersonService],
})
export class AppModule {}
删除了app.service app.controller
import { DynamicModule, Module } from '@nestjs/common';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
@Module({})
export class DatabaseModule {
static forRoot(configRegister: () => TypeOrmModuleOptions): DynamicModule {
return {
global: true,
module: DatabaseModule,
imports: [TypeOrmModule.forRoot(configRegister())],
};
}
}
// src/config/database.config.ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const database = (): TypeOrmModuleOptions => ({
// 以下为mysql配置
charset: 'utf8mb4',
logging: ['error'],
type: 'mysql',
host: '127.0.0.1',
port: 3306,
username: 'root',
password: '12345678',
database: '3rapp',
synchronize: true,
autoLoadEntities: true,
});
// src/config/index.ts
export * from './database.config';
import { database } from './config';
imports: [PersonModule, ContentModule, CoreModule.forRoot(), DatabaseModule.forRoot(database)],
创建entity
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class PersonEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
age: number;
}
这个图好像没啥用,实际数据库没生成表
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PersonEntity } from './entities';
import { PersonController } from './person.controller';
import { PersonService } from './person.service';
@Module({
imports: [TypeOrmModule.forFeature([PersonEntity])],
controllers: [PersonController],
providers: [PersonService],
})
export class PersonModule {}
需要forFeature,才能生成表
forRoot forFeature的作用和使用场景
core好像没起什么作用 database。module database。config是有用的