NestJS企业级项目模块化配置怎么做

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);
相关推荐
dog shit7 分钟前
web第十次课后作业--Mybatis的增删改查
android·前端·mybatis
我有一只臭臭7 分钟前
el-tabs 切换时数据不更新的问题
前端·vue.js
七灵微11 分钟前
【前端】工具链一本通
前端
Nueuis1 小时前
微信小程序前端面经
前端·微信小程序·小程序
_r0bin_4 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
IT瘾君4 小时前
JavaWeb:前端工程化-Vue
前端·javascript·vue.js
zhang98800004 小时前
JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
开发语言·javascript·vue.js
恸流失4 小时前
DJango项目
后端·python·django
potender4 小时前
前端框架Vue
前端·vue.js·前端框架
站在风口的猪11084 小时前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5