nestjs[controller控制层各种请求方式及参数获取方式]

nestjs入门学习规划:https://blog.csdn.net/lxy869718069/article/details/114028195

前要说明

接收一个接口请求,如:‘/xxx’,通过了各种拦截、中间件、异常过滤等处理之后进入了controller层,然后就需要对前端传递的数据进行获取。
本例以hello-world项目为例,了解controller如何获取各种前端参数以及设置请求方式

控制器简介

nestjs[controller控制层各种请求方式及参数获取方式]_第1张图片
其实理解起来就是:我给前端一个’/xxx’的(get/post/put/delete)请求接口,然后我后端controller层配置一个(@Get(‘xxx’)/@Post(‘xxx’)/@Put(‘xxx’)/@Delete(‘xxx’))的接收方法,一但前端调用了,就触发这个装饰器配置相关方法,同时方法参数中使用(@Request/@Body/@Query/@Param…)等装饰器获取传递过来的参数。

参数获取方式

常用的从前端那里获取的参数的方式也就几种。
1.前端人员什么也不传直接获取数据
例如:localhost:3001/app/userlist
nestjs[controller控制层各种请求方式及参数获取方式]_第2张图片
getUserlist()是属于@Get(‘userlist’)的方法,当请求/app/userlist的时候实际作用就是调用这个方法,一般这个方法里面使用的service中的调用逻辑(当前先不管)。
使用postman请求结果:
nestjs[controller控制层各种请求方式及参数获取方式]_第3张图片
2.前端人员传递的参数在query里面
例如:localhost:3001/app/userinfo?id=‘1’
nestjs[controller控制层各种请求方式及参数获取方式]_第4张图片
这里需要使用@Query装饰器来获取内容,其返回的是一个由?id='1’所构成的对象{id:‘1’}
使用postman请求结果:
nestjs[controller控制层各种请求方式及参数获取方式]_第5张图片
3.前端人员传递的是动态参数
例如:localhost:3001/app/paraminput,其中这个paraminput是一个动态参数(其值不确定,有可能是paraminput 或者test或者其他)由用户来自定义传递

nestjs[controller控制层各种请求方式及参数获取方式]_第6张图片
这里要注意的是:
@Get()本身是没有命名的,他的命名由传入进来的@Param字段的值来决定的,因此会出现localhost:3000/app/paraminput,而paraminput是一个动态值,也可以是localhost:3000/app/test之类的,要区分好和Query的区别
使用postman请求结果:
nestjs[controller控制层各种请求方式及参数获取方式]_第7张图片
4.前端人员传递的参数在body里面
例如:localhost:3001/app/userinfo
注意:这里的接口名称和Get的接口名称是一样的,但是只要是请求方式不同,那么就会是两个接口
请求方式:post
请求数据:在body里面
准备工作
1.了解请求头:请求头里面通常会带有这里请求的一些基本信息,当前我们主要了解其中两个内容
1.Content-Type含义及其作用
一个正确的HTTP请求应当具备状态行、请求头、消息主体,数据本身的编码方式由Content-Type声明,请求的客户端和服务端必须遵守同一个编码方式才能正确解析数据的内容
类型1:Content-Type:application/x-www-form-urlencoded—常用于原生的 form 表单提交
类型2:Content-Type:multipart/form-data —常用于文件传输
类型3:Content-Type:application/json —以Json格式编码数据体,方便传输结构化数据(键值对),广泛用于 ajax 请求
类型4:…
以上三种常用于项目开发中,至于其他的特殊需求可以根据需要使用
nestjs[controller控制层各种请求方式及参数获取方式]_第8张图片
其中@Body 用于获取post请求体中的参数内容,@Headers用于获取请求头内容如下:
nestjs[controller控制层各种请求方式及参数获取方式]_第9张图片
使用postman请求结果:
这里是(Content-Type:application/x-www-form-urlencoded)请求头,其他方式也一样。
nestjs[controller控制层各种请求方式及参数获取方式]_第10张图片
nestjs[controller控制层各种请求方式及参数获取方式]_第11张图片
5.补充:前端人员传递xml数据的获取方式(文件上传formdata获取方式类似)
首先要了解的内容:
nestjs当前默认服务器是express,当不考虑换服务器的时候,我们得知道
express 默认只支持:
application/json,
application/x-www-form-urlencoded,
multipart/form-data。
这三种请求方式的内容。
然后还得知道express获取数据的实质是请求体调用on监听data方法来获取如:

@Post('userxml')
  getUserXML(@Request() req): string {
    // @Request()获取express原生请求体,监听data方法拿到req数据
    req.on('data', reqs => {
      console.log(reqs);
    })
    return '';
  }
postman输入测试内容

nestjs[controller控制层各种请求方式及参数获取方式]_第12张图片
nestjs[controller控制层各种请求方式及参数获取方式]_第13张图片
执行效果如下
nestjs[controller控制层各种请求方式及参数获取方式]_第14张图片
可以看出内容已经传递过来了,但是确是一些乱码。因此我们需要插件的协助来转换获取到的reqs数据:

npm install --save xml2js

使用如下:
nestjs[controller控制层各种请求方式及参数获取方式]_第15张图片
nestjs[controller控制层各种请求方式及参数获取方式]_第16张图片
可以看出打印已经有json形势的结果了,具体转换规则可以了解下xml2js这个包
提示:这里仅仅只是一种局部实现方式,也可以将这个内容注册成全局的,或者配置直接让express支持xml请求数据。可根据实际需求调整。
中间件实现方式参考:https://editor.csdn.net/md/?articleId=103909617

请求方式装饰器

@Get()
@Post()
@Put()
@Delete()

这里列了几个常用的请求方式装饰器,但是在开发中用的最多的还是@Get()和@Post()这两个,其他的有时间自己了解吧。

请求参数装饰器

nestjs[controller控制层各种请求方式及参数获取方式]_第17张图片
请求参数装饰器就是用于获取参数的各类装饰器。常用的有:@Query()、@Body()、@Headers()、@Param(‘param’)等。

form/data传递方式参考文件上传

你可能感兴趣的:(nestJS,nest参数获取,nest,controller)