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);
相关推荐
阿里小阿希19 分钟前
解决 pnpm dev 运行报错的坎坷历程
前端·node.js
未脱发程序员30 分钟前
分享一款开源的图片去重软件 ImageContrastTools,基于Electron和hash算法
前端·javascript·electron
geovindu1 小时前
vue3: pdf.js 2.16.105 using typescript
javascript·vue.js·typescript·pdf
视频砖家1 小时前
Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)
前端·vscode·vscode乱码·vscode中文乱码·vscode中文编码
2401_837088501 小时前
CSS transition过渡属性
前端·css
我爱吃朱肉1 小时前
深入理解 CSS Flex 布局:代码实例解析
前端·css
喝养乐多长不高1 小时前
Spring Web MVC基础理论和使用
java·前端·后端·spring·mvc·springmvc
莫轻言舞2 小时前
SpringBoot整合PDF导出功能
spring boot·后端·pdf
玄武后端技术栈2 小时前
什么是死信队列?死信队列是如何导致的?
后端·rabbitmq·死信队列
zh73143 小时前
支付宝沙盒模式商家转账经常出现 响应异常: 解包错误
前端·阿里云·php