JS后端框架 Nest.js入门篇 控制层、Controller(一)

注:此文仅记录博主初次学习nestjs之后的认识和理解,经验尚浅,文章内容仅供参考,如若有误,敬请指正。

控制层(controller)

此层职责:请求处理、业务调用、响应构造
对HTTP请求和响应报文结构不熟悉的可先阅读博客:https://blog.csdn.net/jw2268136570/article/details/103216174

  • 配置:根模块(app.module.ts)中配置该控制器 controllers: [AppController],

0.单线程处理

  • Node.js 不遵循请求/响应多线程无状态模型,每个请求都由主线程处理。
  • 当请求完整周期内涉及到或可能涉及到异步操作时,可使用 async / await进行异步处理

1.请求处理

匹配请求
  • 匹配处理:装饰器建立请求与controller的映射。
  • 匹配规则:请求前缀prefix(class前缀、method前缀,支持通配符*) 、请求方法 GET/POST/…
  • 动态url匹配
  • 子域路由:根据请求的host来判断接口的调用权限
访问request
请求信息 装饰器方式访问 普通对象访问
请求 @Request() req
请求session @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]
请求IP @Ip() req.ip
  • 案例
import {
    
     Controller, Get ,Req, Ip, Post,Query,Param,Body} from '@nestjs/common';
import {
    
     AppService } from './app.service';
import {
    
     Request, query } from 'express';
// import {CreateCatDto} from './DTO/catDto'
class CreateCatDto {
    
    
  readonly name: string;
  readonly age: number;
  readonly breed: string;
}
@Controller()
export class AppController {
    
    
  constructor(private readonly appService: AppService) {
    
    }

  @Get('test')
  getHello(@Req() request: Request, @Query('name') name:String,@Ip() ip:String): string {
    
    
    console.log(`请求参数name为(普通对象): ${
      
      request.query['name']}`)
    console.log(`请求参数name为(装饰器): ${
      
      name}`)
    console.log(`ip地址为(普通对象): ${
      
      request.ip}`)
    console.log(`ip地址为(装饰器): ${
      
      ip}`)
    return this.appService.getHello();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    
    
    return `This action returns a #${
      
      id} cat`;
  }

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    
    // POST请求参数获取,@Body()配合DTO类
    return 'This action adds a new cat';
  }
}

2.业务调用

  • 引入:import { AppService } from ‘./app.service’;
  • 调用: return this.appService.getHello();

3.响应构造

访问response
响应信息 装饰器方式访问 普通对象访问
响应 @Response() @Res()* res
构造状态行
  • 状态码:@HttpCode(204)
构造响应头
  • 响应头:@Header(‘Cache-Control’, ‘none’)
构造响应体
  • 返回页面/基本类型
  • 返回对象/数组:自动序列化为JSON
重定向
  • 基本语法:@Redirect(‘https://nestjs.com’)
  • 动态url:controller方法 return { url: ‘https://docs.nestjs.com/v5/’ };

猜你喜欢

转载自blog.csdn.net/jw2268136570/article/details/107770001