08_nest.js控制器详解

简介: 08_nest.js控制器详解

1.Controller Request (获取前端传过来的参数)

装饰器名称

对应参数

@Request()

req

@Response()

res

@Next()

next

@Session()

req.session

@Param(key?: string)

req.params/req.params[key]

@Body(key?: string)

req.body/req.body[key]

@Query(key?: string)

req.query/req.query[key]

@Headers(name?: string)

req.headers/req.headers[name]

@HttpCode

写在前面:在下面的例子中,如果不加装饰器直接打印req,打印的内容将是undefined。即req是通过装饰器才获取到的值

Request装饰器

获取request信息(包含请求头和请求体)

对于get请求:

import {
  Controller,
  Get,
  Request,
} from '@nestjs/common';
@Get()
findAll(@Request() req) {
  console.log(req.query)  // 打印get的请求参数信息(query传参)
  return {
    code: 200,
    data:req.query.name
  };
}

对于post请求:

import {
  Controller,
  Get,
  Request,
} from '@nestjs/common';
@Post()
  create(@Request() req) {
    console.log(req.body) // 打印post的请求参数信息(请求体)
    return {
      code:200,
    }
  }

Query装饰器

可以直接获取到GET请求的query参数,无需再req.query

import {
  Controller,
  Get,
  Query,
} from '@nestjs/common';
@Get()
findAll(@Query() query) {
  console.log(query)  // 打印get的请求参数信息
  return {
    code: 200,
    data:query.name
  };
}

Body装饰器

可以直接获取到POST请求的body参数,无需req.body

import {
  Controller,
  Get,
  Post,
  Body,
}
@Post()
  create(@Body() body) {
    console.log(body)
    return {
      code:200,
    }
  }

此外,Query和Body还可以通过传入key来读取对应的值,其他的值将被忽略

@Get()
findAll(@Query('message') query) {
  console.log(query)  // 打印get的请求参数信息
  return {
    code: 200,
    data:query.name
  };
}
@Post()
  create(@Body('message') body) {
    console.log(body)
    return {
      code:200,
    }
  }
/* 
  对于以上两段代码,如果传递的参数是{name:'xiaoman',message:'小满zs'}则只会输出'小满zs',name的值被过滤了
*/

动态传参Params

和Vue中类似,next.js支持params传参方式,以下为一个例子,接收的参数key为'id'

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  @Get(':id')
  findAll(@Request() req) {
    console.log(req.params.id);
    return {
      code: 200,
      data: req.params.id,
    };
  }
}
// 若请求url为http://localhost:3000/x,则id为x

同样的,nest.js也提供了@Param装饰器(注意没有s)来直接获取params参数,这个装饰器也可以通过传入一个key来过滤其他不需要的请求信息

  1. 直接调用
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  @Get(':id')
  findAll(@Param() params) {
    console.log(params);  // {"id": "6"}
    return {
      code: 200,
      data: params,
    };
  }
}
  1. 过滤参数
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  @Get(':id')
  findAll(@Param('id') id) {
    console.log(id);  // 6
    return {
      code: 200,
      data: id,
    };
  }
}

Headers装饰器

获取请求头信息

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  @Get(':id')
  findAll(@Param() req, @Headers() headers) {
    console.log(headers);
    return {
      code: 200,
      data: headers,
    };
  }
}
// headers的内容:
/* 
  {
        "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)",
        "accept": "*/*",
        "host": "localhost:3000",
        "accept-encoding": "gzip, deflate, br",
        "connection": "keep-alive",
        "cookie": "123=4566"
    }
*/

如图,headers变量即为保存请求头信息的变量

@HttpCode装饰器

修改响应状态码

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  @Get(':id')
  // 其他都不重要,就看下面这行,请求状态码被改成500
  @HttpCode(500)
  findAll(@Param() req, @Headers() headers) {
    console.log(headers);
    return {
      code: 200,
      data: headers,
    };
  }
}

目录
相关文章
|
8月前
|
缓存 Shell API
一文带你掌握nest.js访问静态资源
一文带你掌握nest.js访问静态资源
一文带你掌握nest.js访问静态资源
|
30天前
11_nest.js模块
11_nest.js模块
24 0
|
30天前
|
中间件
12_nest.js中间
12_nest.js中间
39 1
|
30天前
|
前端开发
10_nest.js 提供者
10_nest.js 提供者
25 3
|
8月前
|
API 网络架构
初识nest.js的controller(入门)
初识nest.js的controller(入门)
|
9月前
|
JavaScript
为什么从egg.js到nest.js(二)
进入部门工作后,接触到的node.js服务端框架,是egg.js,后面基于扩展增加了很多插件,比如:@Controller @Service等注解,还有针对egg-framework 定制化部门使用的底层framework。
76 0
为什么从egg.js到nest.js(二)
|
9月前
|
SQL JSON JavaScript
为什么从egg.js到nest.js(一)
进入部门工作后,接触到的node.js服务端框架,是egg.js,后面基于扩展增加了很多插件,比如:@Controller @Service等注解,还有针对egg-framework 定制化部门使用的底层framework。
340 0
|
11月前
快速入门nest.js(1/10)--Controller
这里的coffee字符将我们的应用程序的/coffee url绑定到了这个控制器上,此时如果直接像 http://localhost:3000/coffees 请求会404,因为我们还没有在这个控制器中设置一个GET路由
66 0
|
11月前
|
开发框架 JavaScript 前端开发
Nest.js学习笔记(一)
本系列笔记内容根据B站up主“小满zs”视频教程整理而成,本节简要介绍Nest.js
86 0
|
11月前
|
数据库
Nest.js学习笔记(五)
本节记录Nest.js工程相关知识
61 0