控制器的装饰器是怎么根据请求地址命中对应方法的?

demo:

import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class CatsController {

  @Get('a')
  findAll(): string {
    return 'This action returns all cats';
  }
}

当请求 /cats/a 框架是如何通过装饰器定位到 findAll()这个方法的呢?他的原理是什么?

阅读 1.8k
1 个回答

@Controller这个东西在JS中叫装饰器,关于它的语法你可以去搜搜看,原理上跟函数差不太多,也就是在CatsController之上额外多加了一些逻辑,这些逻辑你不需要写在这个class里,好奇怎么实现的最佳路径是直接看源码,装饰器作用看下文档然后再去找源码部分就能大概理解了,其实就是通过这么一层包装把catsa这样的路径记下来

function Controller(path) {
    return tar => tar.path = path
}
function Get(path) {
    return (method,tar) => tar.path += '/' + path
}

有点上面这样的味道,源码并非这样,只是大概描述下逻辑概念,总之就是把路径记到controller上,之后再取出来匹配

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题