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"
}
*/
@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,
};
}
}