Nestjs——Controller获取请求信息

1,267 阅读3分钟

1.获取get请求传参

我们可以通过不同的参数装饰器获取前端传来ajax的get请求中不同的内容

  1. @Request(),可以获取req对象,req.query可以获得Query参数装饰器的内容
  2. @Query(),可以直接获取到req对象中query属性的内容

通过Query参数装饰器来获取到前端传来的参数,参考以下代码:

import { Controller, Get, Post, Body, Patch, Param, Delete, Version,Request, Query } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

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

  @Get()
  findAll(@Query() query){
      console.log(query)
      return {
        code:200,
        message:query.name
      }
  }
}

我们在apifox上模拟前端发送get请求,前端得到的接口数据为:

image.png

后端打印出来收到的参数为:

image.png

2.获取post请求传参

我们可以通过这两种参数装饰器获取前端传来ajax的post请求中不同的内容

  1. @Request(),可以获取req对象,req.body可以获得Body参数装饰器的内容
  2. @Body(),可以直接获取到req对象中body属性的内容

通过参数装饰器来获取到前端传来的参数,参考以下代码:

import { Controller, Get, Post, Body, Patch, Param, Delete, Version,Request, Query } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

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

  @Post()
  AddData(@Body("name") name){
      console.log(name)
      return {
        code:200,
        message:"Post"+ name
      }
  }
}

我们在apifox上模拟前端发送post请求,前端得到的接口数据为:

image.png 后端打印出来收到的参数为:

image.png

3.获取动态路由参数

同样的,我们也可以用这两种参数装饰器来获取动态路由的参数

  1. @Request(),可以获取req对象,req.params可以获取Param参数装饰器的内容
  2. @Param(),可以直接获取到req对象中params属性的内容
import { Controller, Get, Post, Body, Patch, Param, Delete, Version,Request, Query } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

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

  @Get(":id")
  findId(@Request() req){
    console.log(req.params)
    return{
      code:200,
      message:req.params
    }
  }
}

我们在apifox上模拟前端发送get动态路由请求,前端得到的接口数据为: image.png

后端打印出来收到的参数为:

image.png

4.获取请求头信息

获取请求头信息利用的是Header参数装饰器,有了上面介绍过的装饰器的用法,其实所有装饰器的用法都类似。

参考以下代码:

import { Controller, Get, Post, Body, Patch, Param, Delete, Version,Request, Query,Headers } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

@Controller({
  path:"user"
})

export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get(":id")
  findId(@Request() req, @Headers() head){
    console.log(head)
    return{
      code:200,
      head,
      message:req.params
    }
  }

}

发送带有cookie的请求,前端得到的接口数据为: image.png

后端打印的数据为:

image.png

5、获取状态码

通过 @HttpCode 这个函数装饰器,我们可以设置响应的状态码,例如:

import { Controller, Get, Post, Body, Patch, Param, Delete, Version,Request, Query,Headers,HttpCode } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

@Controller({
  path:"user"
})

export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get(':id')
  @HttpCode(500)
  findId (@Headers() header) {
    return {
       code:500
    }
  }

}

前端得到的响应:

image.png