跳转到内容

花式数据请求

发布于:
如何获取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()