1.Controller Request (获取前端传过来的参数)
装饰器名称 |
对应参数 |
@Request() |
req |
@Response() |
res |
@Next() |
next |
@Session() |
req.session |
@Param(key?: string) |
req.params/req.params[key] |
@Body(key?: string) |
req.body/req.body[key] |
@Query(key?: string) |
req.query/req.query[key] |
@Headers(name?: string) |
req.headers/req.headers[name] |
@HttpCode |
写在前面:在下面的例子中,如果不加装饰器直接打印req,打印的内容将是undefined。即req是通过装饰器才获取到的值
Request装饰器
获取request信息(包含请求头和请求体)
对于get请求:
import { Controller, Get, Request, } from '@nestjs/common'; @Get() findAll(@Request() req) { console.log(req.query) // 打印get的请求参数信息(query传参) return { code: 200, data:req.query.name }; }
对于post请求:
import { Controller, Get, Request, } from '@nestjs/common'; @Post() create(@Request() req) { console.log(req.body) // 打印post的请求参数信息(请求体) return { code:200, } }
Query装饰器
可以直接获取到GET请求的query参数,无需再req.query
import { Controller, Get, Query, } from '@nestjs/common'; @Get() findAll(@Query() query) { console.log(query) // 打印get的请求参数信息 return { code: 200, data:query.name }; }
Body装饰器
可以直接获取到POST请求的body参数,无需req.body
import { Controller, Get, Post, Body, } @Post() create(@Body() body) { console.log(body) return { code:200, } }
此外,Query和Body还可以通过传入key来读取对应的值,其他的值将被忽略
@Get() findAll(@Query('message') query) { console.log(query) // 打印get的请求参数信息 return { code: 200, data:query.name }; } @Post() create(@Body('message') body) { console.log(body) return { code:200, } } /* 对于以上两段代码,如果传递的参数是{name:'xiaoman',message:'小满zs'}则只会输出'小满zs',name的值被过滤了 */
动态传参Params
和Vue中类似,next.js支持params传参方式,以下为一个例子,接收的参数key为'id'
@Controller('user') export class UserController { constructor(private readonly userService: UserService) {} @Get(':id') findAll(@Request() req) { console.log(req.params.id); return { code: 200, data: req.params.id, }; } } // 若请求url为http://localhost:3000/x,则id为x
同样的,nest.js也提供了@Param装饰器(注意没有s)来直接获取params参数,这个装饰器也可以通过传入一个key来过滤其他不需要的请求信息
- 直接调用
@Controller('user') export class UserController { constructor(private readonly userService: UserService) {} @Get(':id') findAll(@Param() params) { console.log(params); // {"id": "6"} return { code: 200, data: params, }; } }
- 过滤参数
@Controller('user') export class UserController { constructor(private readonly userService: UserService) {} @Get(':id') findAll(@Param('id') id) { console.log(id); // 6 return { code: 200, data: id, }; } }
Headers装饰器
获取请求头信息
@Controller('user') export class UserController { constructor(private readonly userService: UserService) {} @Get(':id') findAll(@Param() req, @Headers() headers) { console.log(headers); return { code: 200, data: headers, }; } } // headers的内容: /* { "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "accept": "*/*", "host": "localhost:3000", "accept-encoding": "gzip, deflate, br", "connection": "keep-alive", "cookie": "123=4566" } */
如图,headers变量即为保存请求头信息的变量
@HttpCode装饰器
修改响应状态码
@Controller('user') export class UserController { constructor(private readonly userService: UserService) {} @Get(':id') // 其他都不重要,就看下面这行,请求状态码被改成500 @HttpCode(500) findAll(@Param() req, @Headers() headers) { console.log(headers); return { code: 200, data: headers, }; } }