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);
相关推荐
其实防守也摸鱼1 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
风若飞2 小时前
Spring Ai 入门遇到问题1
java·后端·spring
AI入职记2 小时前
Spring AI 结构化输出:结构 100% 通过,严格准确率只有 57%
后端·ai编程
朱涛的自习室2 小时前
212 个需求、22 万行代码:Agent 接管开源项目的 19 天
android·前端·人工智能
aZhe的全栈知识分享2 小时前
AI 还原 Figma 效果总达不到预期?先别急着让它写代码
前端·后端·面试
review445432 小时前
Codex Hooks 入门实战:生命周期事件、matcher 与5分钟跑通一个钩子
前端·agent·vibecoding
码事漫谈2 小时前
WorkBuddy 一直更新卡死?两个毛病,一套处理办法
后端
函数小陈2 小时前
阿里云部署DSH与RAM完成运维
前端·后端
aurora_zjj2 小时前
一次持续 3 年的 OpenResty 死循环排查:最终定位到 LuaJIT ARM64 的一条汇编指令
后端
智驭未来掌门人2 小时前
动态平台雷达目标引导系统设计与实现
后端