花式数据请求

如何获取url中的参数呢

比如get用户id

1
2
3
4
5
6
7
8
9
10
11
12
import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}

@Get('/:id')
getUsers() {
return "GetUsers"
}
}

在nest中,可以用param装饰器获取,这种参数总是以斜线加冒号的形式给出

这么用

1
2
3
4
5
6
7
8
9
10
11
12
13
import { Controller, Get,Param} from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}

@Get('/:id')
getUsers(@Param() params: any) {
console.log(params)//获取参数
return "GetUsers"
}
}

多写个参数会怎么样?不会怎么样,像写多少写多少

发送/users/123456/optional

1
2
3
4
5
@Get('/:id:optional?')
getUsers(@Param() params: any) {
console.log(params) //{id:'123456',optional:'optional'}
return "GetUsers"
}

发送/users/123456

1
{id:'123456',optional:undfiend}

这就是如何获取参数。

除了获取,自然也能查询

查询参数

使用Query()

通过 url 中 ?后面的用 & 分隔的字符串传递数据。

1
http://wx.com/person?name=wx&age=23

name和age就是其传递的数据

发送users/123456?limit=10&offset=20

1
{limit:'10',offset:'20'}

最终提供的是js对象

那怎么发请求主体呢

请求参数

先写个请求主体

1
2
3
4
5
{
'name':'wx',
'password':'123456',
'email':'wx.com'
}

那这种要怎么获取呢

Body()

1
2
3
4
5
@Post()
createUsers(@Body() request:any){
console.log(request)
return 'you sen a post request'
}

打印出

1
2
3
4
5
{
'name':'wx',
'password':'123456',
'email':'wx.com'
}

nest底层使用了express,所以也可以这么玩

1
2
import {Req} from '@nestjs/common'
import {Request} from 'express'
1
2
3
4
5
@Post()
createUsers(@Req() request:Request){
console.log(request)
return 'you sen a post request'
}

这下子会打印一个很长的的对象,整个请求对象

这样也只是能玩罢了,不建议用

那么怎么缩小范围,获取特定的查询参数,参数或者特定键值对呢

比如

1
2
3
4
5
6
@Get('/:id:optional?')
getUsers(@Param() params: any, @Query() query: any) {
console.log(params);
console.log(query);
return 'GetUsers';
}

我只想获取id,不想获取可选的东西呢

在括号里加点东西就行了

1
2
3
4
5
6
@Get('/:id:optional?')
getUsers(@Param('id') id: any, @Query() query: any) {
console.log(id);
console.log(query);
return 'GetUsers';
}

如果想获取请求头,有Headers()

还有Ip()