NestJS企业级项目模块化配置怎么做
抽离实体entity
javascript
/ src/common/entity/index.ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { User } from './modules/user/user.entity';
export const typeOrmConfig: TypeOrmModuleOptions = {
type: 'mysql', // 可以选择其他数据库,如 MySQL
host: 'localhost',
port: 3306,
username: 'root',
password: '123456',
database: 'nexusnest',
entities: [User],
synchronize: true,
};
主模块之中使用
javascript
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './modules/user/user.module';
import { typeOrmConfig } from './common/entity/index'; // 导入 typeOrmConfig 配置
@Module({
imports: [
TypeOrmModule.forRoot(typeOrmConfig),
// 在 AppModule 中导入 TypeOrmModule.forRoot() 方法,并传入 typeOrmConfig 配置,
UserModule,
],
})
export class AppModule {}
配置公共路径@
👉 在tsconfig.json职中进行配置项目公共路径,配置完直接可以@访问src下面的路径内容
javascript
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
}
}
之前我们已经搭建好了数据库,接下来我们就将user用户模块给封装起来,尝试写一个用户模块
把我们之前写好的用户模块给抽离出来为user.module.ts,其他模块也放到user模块下面
javascript
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}
命令式生成
这里我们直接拿命令就可以帮助我们搭建目录和文件
javascript
// 检测自己的nest版本
nest --version
我本地是11.0.6的版本,没有检测到版本就是你之前忘记了安装
// 安装命令(已安装的忽略)
npm install -g @nestjs/cli
// 搭建
nest generate module modules/user
// 具体命令
nest generate module modules/user
nest generate controller modules/user
nest generate service modules/user
安装完成以后我们目录结构就会成为
javascript
├─src
│ ├─modules
│ │ └─user
│
// user 下面包含的文件
user.controller.spec.ts
user.controller.ts
user.module.ts
user.service.spec.ts
user.service.ts
配置去掉测试文件
我们发现user下面除了生成我们需要的三个文件还生成了user.service.spec.ts之类带spec的文件,这个就是测试文件
方式一(命名时候去掉 --采用 )
javascript
// 命名时候去掉
nest generate module modules/user --no-spec
// 完整跳过命令
nest generate module modules/user --no-spec
nest generate controller modules/user --no-spec
nest generate service modules/user --no-spec
方式二(没成功----跳过)
全局禁用在根目录文件nest-cli.json
之中去掉
javascript
nest-cli.json
"generateOptions": {
"spec": false
}
抽离用户模块
这里我们就把我们需要的模块全部进行了对应的抽离
整个NestJS的数据过程如下:controller => service => module
user= > user.entity.ts
javascript
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity('users')
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
}
user= > user.controller.ts
javascript
import { Controller, Get, Post, Param, Body, Put, Delete } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.entity';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
async findAll(): Promise<User[]> {
return this.userService.findAll();
}
}
user= > user.service.ts
javascript
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
) {}
// 获取所有用户
async findAll(): Promise<User[]> {
return this.userRepository.find();
}
}
user= > user.module.ts
javascript
// src/user/user.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserService } from './user.service';
import { UserController } from './user.controller';
@Module({
imports: [TypeOrmModule.forFeature([User])], // 导入实体
controllers: [UserController], // 注册控制器
providers: [UserService], // 注册服务
})
export class UserModule {}
主模块引入UserModule
javascript
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from './modules/user/user.controller';
import { UserService } from './modules/user/user.service';
import { User } from './modules/user/user.entity';
import { UserModule } from './user.module';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql', // 可以选择其他数据库,如 MySQL
host: 'localhost',
port: 3306,
username: 'root',
password: 'XXXXXX',
database: 'nexusnest',
entities: [User],
synchronize: true,
}),
UserModule,
],
// controllers: [UserController],
// providers: [UserService],
})
export class AppModule {}
这里我们也可以将entities之中的实体全部抽离出来
设置接口前缀setGlobalPrefix
javascript
// 设置全局接口前缀
app.setGlobalPrefix('api/v1');
设置端口号
javascript
await app.listen(process.env.PORT ?? 8888);