{
"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)
}
}
确保以下内容已经配置正确
验证管道
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)
}