CRUD 接口实现

Nest CLI 贴心的为我们提供了快速生成模块的命令,我们只需要输入命令,就可以生成一个完整的模块。

注意脚本命令执行的路径,一般在 src/modules 路径下执行。

$ nest generate|g module|mo user
$ nest generate|g controller|co user
$ nest generate|g service|s user

准备 user 模块

执行上述脚本,可以生成一个完整的 user 模块。具体文件及代码如下:

🚩 src/modules/user/user.module.ts

import { Module } from "@nestjs/common";
import { UserController } from "./user.controller";
import { UserService } from "./user.service";

@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

🚩 src/modules/user/user.controller.ts

import { Controller } from "@nestjs/common";

@Controller("user")
export class UserController {}

🚩 src/modules/user/user.service.ts

import { Injectable } from "@nestjs/common";

@Injectable()
export class UserService {}

此外,还有对应的 controller 和 service 的测试文件,这里不做介绍。

注意,不要忘记在 app.module.ts 中引入 user 模块。

// app.module.ts
import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { UserModule } from "./modules/user/user.module";

@Module({
  imports: [UserModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

controller 相关编码

import { Body, Controller, Delete, Get, Param, Post, Put, Query } from '@nestjs/common';
import { UserService } from './user.service';
import { UserItem } from 'src/core/types/user';

@Controller('/user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get('/getUserList')
  getUserList(): UserItem[] {
    return this.userService.getUserList();
  }

  @Post('addUser')
  addUser(@Body() userData): UserItem[] {
    return this.userService.addUser(userData);
  }

  @Get('getUserDetail/:id')
  getUserDetail(@Param('id') id: string): UserItem {
    return this.userService.getUserDetail(id);
  }

  @Put('updateUser')
  updateUser(@Body() userData): UserItem[] {
    return this.userService.updateUser(userData);
  }

  @Delete('deleteUser')
  deleteUser(@Query() query): UserItem[] {
    return this.userService.deleteUser(query.id);
  }
}

service 相关编码

import { Injectable } from '@nestjs/common';
import { UserItem } from 'src/core/types/user';

@Injectable()
export class UserService {
  private userList = []; // 没有数据库,暂时通过该方式定义数据

  getUserList(): UserItem[] {
    return this.userList;
  }

  addUser(userData: UserItem): UserItem[] {
    this.userList.push(userData);
    return this.userList;
  }

  getUserDetail(targetUserId: string): UserItem {
    const targetUserArray = this.userList.filter(
      (item) => item.id === parseInt(targetUserId),
    );
    return targetUserArray[0] || {};
  }

  updateUser(userData: UserItem): UserItem[] {
    this.userList = this.userList.map((item) => {
      if (item.id === userData.id) {
        return userData;
      }
      return item;
    });
    return this.userList;
  }

  deleteUser(deleteId): UserItem[] {
    this.userList = this.userList.filter(
      (item) => item.id !== parseInt(deleteId),
    );
    return this.userList;
  }
}

到这里我们的用户管理模块就完成了,是不是很简单?这个时候就可以通过 nest start 启动我们的服务了,然后在 postman 里面测试一下。快去试试吧 🎊