如何获取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) 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()