【问题标题】:NestJs - How to get url of handler?NestJs - 如何获取处理程序的网址?
【发布时间】:2018-04-20 05:54:03
【问题描述】:

我想将用户重定向到我服务器中的另一个 url,但我不想像res.redirect('/hello_world') 这样对 url 进行硬编码。相反,我只想指定指定控制器的处理程序 url,例如 res.redirect(HelloWorldController.handlerName.url),其中 HelloWorldContoller 是

@Controller()
export class HelloWorldController {
    @Get('hello_world')
    handlerName(): string {
        return 'Hello World!';
    }
}

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    例如,您可以使用 Reflect 来获取如下元数据:

    import { PATH_METADATA } from '@nestjs/common/constants';
    
    @Controller('api')
    export class ApiController {
      @Get('hello')
      root() {
        let routePath = Reflect.getMetadata(PATH_METADATA, StaticController);
        routePath += '/' + Reflect.getMetadata(PATH_METADATA, StaticController.prototype.serveStatic);
        console.log(routePath); will return `api/hello`
        return {
          message: 'Hello World!',
        };
      }
    }
    
    1. 我们得到api元数据
    2. 然后是方法

    如果我需要的路径不是 self url 而是其他路径,为什么它返回 api/hello 控制器的网址?

    这里以StaticController为例,你可以导入任何其他控制器并传递给Reflect.getMetadata(PATH_METADATA, AnyOtherController);

    【讨论】:

    • 感谢您的回答,但有一些误解: 1st - 什么是 PATH_METADATA?和第二 - 如果我需要的路径不是自己的 url,而是其他控制器的 url,为什么它返回 api/hello
    • 好的。我明白了。我们写的是“路径”,而不是 PATH_METADATA。我们得到指定控制器路径和方法路径的url。但是,我认为会有 NestJS 的帮助函数返回完整路径,而不是自己创建它。非常感谢
    • @NursultanZarlyk,你也可以看看NestJS在源代码中的实现:github.com/nestjs/nest/blob/…。有一些辅助函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2020-06-19
    • 2023-03-05
    • 2020-03-06
    • 2011-04-21
    相关资源
    最近更新 更多