Skip to content

Nest-模块化配置

抽离实体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);

Released under the MIT License.