如何获取url中的参数呢
比如get用户id
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装饰器获取,这种参数总是以斜线加冒号的形式给出
这么用
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
@Get('/:id:optional?')
getUsers(@Param() params: any) {
console.log(params) //{id:'123456',optional:'optional'}
return "GetUsers"
}
发送/users/123456
{id:'123456',optional:undfiend}
这就是如何获取参数。
除了获取,自然也能查询
查询参数
使用Query()
通过 url 中 ?后面的用 & 分隔的字符串传递数据。
http://wx.com/person?name=wx&age=23
name和age就是其传递的数据
发送users/123456?limit=10&offset=20
{limit:'10',offset:'20'}
最终提供的是js对象
那怎么发请求主体呢
请求参数
先写个请求主体
{
'name':'wx',
'password':'123456',
'email':'wx.com'
}
那这种要怎么获取呢
Body()
@Post()
createUsers(@Body() request:any){
console.log(request)
return 'you sen a post request'
}
打印出
{
'name':'wx',
'password':'123456',
'email':'wx.com'
}
nest底层使用了express,所以也可以这么玩
import { Req } from "@nestjs/common";
import { Request } from "express";
@Post()
createUsers(@Req() request:Request){
console.log(request)
return 'you sen a post request'
}
这下子会打印一个很长的的对象,整个请求对象
这样也只是能玩罢了,不建议用
那么怎么缩小范围,获取特定的查询参数,参数或者特定键值对呢
比如
@Get('/:id:optional?')
getUsers(@Param() params: any, @Query() query: any) {
console.log(params);
console.log(query);
return 'GetUsers';
}
我只想获取id,不想获取可选的东西呢
在括号里加点东西就行了
@Get('/:id:optional?')
getUsers(@Param('id') id: any, @Query() query: any) {
console.log(id);
console.log(query);
return 'GetUsers';
}
如果想获取请求头,有Headers()
还有Ip()