nest学习第一个api

0 阅读1分钟
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",// node调试配置
      "request": "launch",// 启动新进程
      "name": "debug project-server",// 调试配置名称
      "runtimeExecutable": "npm",// 用npm运行命令
      "runtimeArgs": ["run","start:debug"],// 运行npm run start:debug命令
      "console": "integratedTerminal",// 在终端输出
      "restart": true,// 自动重启
      "protocol": "inspector",
      "sourceMaps": true,// 启用源映射,方便在ts中设置断点
      "env":{// 配置环境变量
        "NODE_ENV":"development"
      }
    }
  ]
}

Module:模块定义
Controller:控制器,处理Http请求
Service:服务,包含业务逻辑
生成模块

nest g module user// 生成user模块
nest g controller user// 生成user控制器
nest g service user// 生成user服务

修改user.service.ts

import { Injectable } from '@nestjs/common';
export interface User {
  id:number,
  name:string,
  email:string,
}
@Injectable()
export class UserService {
  // 用户数据
  private users:User[]=[
    {id:1,name:'张一',email:'1@123.com'},
    {id:2,name:'张二',email:'2@123.com'},
    {id:3,name:'张三',email:'3@123.com'}
  ];
  // 查找所有用户
  findAll():User[]{
    return this.users
  };
  // 查找指定用户
  findOne(id:number):User|undefined{
    return this.users.find((user)=>user.id===id);
  };
  // 创建用户
  create(user:Omit<User,'id'>):User{
    const newUser:User={
      id:this.users.length+1,
      ...user,
    }
    this.users.push(newUser)
    return newUser
  }
}

修改user.controller.ts

import { Controller,Get,Post,Body,Param,ParseIntPipe,NotFoundException } from '@nestjs/common';
import {UserService} from './user.service'
import type {User} from './user.service'
@Controller('user')
export class UserController {
  constructor(private readonly userService:UserService){}
  @Get()
  findAll():User[]{
    return this.userService.findAll()
  }

  @Get(':id')
  findOne(@Param('id',ParseIntPipe)id:number):User{
    
    const user= this.userService.findOne(id);
    if(!user){
      throw new NotFoundException(`用户ID${id}不存在`)
    }
    return user;
  }

  @Post()
  create(@Body() createUserData:{name:string,email:string}):User{
    return this.userService.create(createUserData)
  }
}

image.png 确保以下内容已经配置正确

image.png 验证管道

npm i class-validator class-transformer
// 修改main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as dotenv from 'dotenv';
dotenv.config();
import {ValidationPipe} from '@nestjs/common';// 这里
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());// 这里
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
// 创建src/user/dto/create-user.dto.ts
import {IsString,IsEmail,IsNotEmpty} from 'class-validator'

export class CreateUserDto{
  @IsString()
  @IsNotEmpty()
  name:string;

  @IsString()
  @IsNotEmpty()
  email:string;
}
// 修改user.controller.ts
import {CreateUserDto} from './dto/create-user.dto'
@Post()
create(@Body() createUserData:CreateUserDto):User{
  return this.userService.create(createUserData)
}