使用Nest实现HTTP的5种请求

前言


🫥通过前面的两个Node的Web框架的学习,我们了解到了HTTP常见的请求方式,并且分别使用Expresskoa来实现了一下,但是其实我们真正的重点在Nest这个框架的学习和使用并且尽可能的对它进行深入的研究,下面就让我们使用Nest来实现下HTTP的5种请求方式。

一.基本介绍


😀NestExpress等框架的主要差别在于架构属性,我们在演示HTTP的5种请求之前我们首先先来看下Nest的内部分层,我们知道在Nest种主要分为了三个模块,分别是controller service module他们之间的关系是如下这种:controller依赖service然后两者又都被注册在module之中,然后不同的模块之间也可以互相使用数据。

二.url params


🐻首先我们来实现下url params这种方式,因为只是演示所以我们不使用service来提供数据,我们直接在controller种进行请求的接收和处理。

🫥在下方代码中@Get(':id')是一个路由装饰器,用于指定请求的路由路径,并可以包含动态的URL参数,在这个例子中:id表示的是一个可变的参数,@Param('id')是一个参数装饰器,用于从HTTP请求中获取指定的URL参数的值并绑定到相应的方法参数上。在这个例子中,@Param('id')指定了要获取的URL参数的名称为id。当请求到达时,Nest框架将提取URL中的id参数的值,并将其传递给被修饰的方法的id参数,简单理解就是@Get对前端请求做限定,@Param获取路径中的参数绑定给名为id的参数。

ts 复制代码
import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UploadedFiles } from "@nestjs/common";
import { PersonService } from './person.service';
import { CreatePersonDto } from './dto/create-person.dto';
import { UpdatePersonDto } from './dto/update-person.dto';

@Controller('person')
export class PersonController {
  constructor(private readonly personService: PersonService) {}

  @Get(':id')
  urlParams(@Param('id') id:string){
    return `url params${id}`
  }
}

理解了上述代码的含义,我们使用apifox来进行请求试一试。

三.query


🐻其实相对于params的请求方式在Get中我们使用更多的是query的方式来进行请求,其中@Get装饰器的作用依然是对路由进行限定,这里的@Query装饰器是以query的方式取数据进行注入方法。

ts 复制代码
import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UploadedFiles } from "@nestjs/common";
import { PersonService } from './person.service';
import { CreatePersonDto } from './dto/create-person.dto';
import { UpdatePersonDto } from './dto/update-person.dto';

@Controller('person')
export class PersonController {
  constructor(private readonly personService: PersonService) {}

  @Get('find')
  query(@Query('name') name:string,@Query('age') age:number){
    return `你的姓名和年龄分别为${name}--${age}`
  }
}

使用apifox来进行访问参数和配置如下。

四.form-urlencoded与json


🥱你可能会记得在前面Expresskoa中我们在使用POST请求的时候对这两种格式的配置和操作是一样的,其实在Nest也是同样的,我们只需要使用@Body装饰器即可获取前端传递过来的数据。

ts 复制代码
import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UploadedFiles } from "@nestjs/common";
import { PersonService } from './person.service';
import { CreatePersonDto } from './dto/create-person.dto';
import { UpdatePersonDto } from './dto/update-person.dto';

@Controller('person')
export class PersonController {
  constructor(private readonly personService: PersonService) {}

  @Post()
  body(@Body() createPersonDto:CreatePersonDto){
    return `${JSON.stringify(createPersonDto)}`
  }
}

我们使用apifox来分别进行对应的请求。

五.form-data


😎form-data的格式一般情况下我们会用在文件的上传,我们来看下如何在Nest中来实现。

ts 复制代码
import { AnyFilesInterceptor } from '@nestjs/platform-express';
import { CreatePersonDto } from './dto/create-person.dto';

@Controller('api/person')
export class PersonController {
  @Post('file')
  @UseInterceptors(AnyFilesInterceptor({
      dest: 'uploads/'
  }))
  body2(@Body() createPersonDto: CreatePersonDto, @UploadedFiles() files: Array<Express.Multer.File>) {
    console.log(files);
    return `received: ${JSON.stringify(createPersonDto)}`
  }
}

🫥@Post('file'):这个装饰器指定了一个处理POST请求的路由路径为/api/person/file,它将会与基本路由路径进行拼接。

🤡@UseInterceptors(AnyFilesInterceptor({ dest: 'uploads/' })):这个装饰器是将AnyFilesInterceptor拦截器应用于该路由处理方法。AnyFilesInterceptor是一个文件上传拦截器,它的配置选项中的dest属性指定了上传文件的目标路径为uploads/。

😀body2(@Body() createPersonDto: CreatePersonDto, @UploadedFiles() files: Array<Express.Multer.File>):这是一个处理请求的方法。@Body()装饰器指定了createPersonDto参数是从请求的请求体中获取的。@UploadedFiles()装饰器指定了files参数是从上传的文件中获取的。Express.Multer.File是一个类型,用于表示上传的文件对象。

六.总结


🐻以上就是使用Nest实现了HTTP服务的操作,除了写法和Express有些差别外,其他方面基本差不多,比较复杂的都是对form-data的处理,本文来源于《Nest通关秘籍》的学习总结~

相关推荐
雄大2 分钟前
使用 QWebChannel 实现 JS 与 C++ 双向通信(超详细 + 踩坑总结 + Demo)
后端
计算机学姐4 分钟前
基于SpringBoot的汉服租赁系统【颜色尺码套装+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
回家路上绕了弯5 分钟前
定期归档历史数据实战指南:从方案设计到落地优化
分布式·后端
+VX:Fegn08955 分钟前
计算机毕业设计|基于springboot + vue建筑材料管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
掘金者阿豪6 分钟前
Redis `WRONGTYPE` 错误的原因及解决方法
后端
天天摸鱼的java工程师9 分钟前
线程池深度解析:核心参数 + 拒绝策略 + 动态调整实战
java·后端
小杨同学4917 分钟前
C 语言实战:动态规划求解最长公共子串(连续),附完整实现与优化
后端
Cache技术分享19 分钟前
290. Java Stream API - 从文本文件的行创建 Stream
前端·后端
用户9483570165119 分钟前
拒绝 try-catch:如何设计全局通用的异常拦截体系?
后端
golang学习记22 分钟前
Go 1.22 隐藏彩蛋:cmp.Or —— 让“默认值”写起来像呼吸一样自然!
后端