【问题标题】:Nest.Js Redirect from a controller to anotherNest.Js 从一个控制器重定向到另一个
【发布时间】:2019-10-17 06:25:24
【问题描述】:

所以我有这个模块:

@Module({
  imports: [],
  controllers: [AppController, AnotherController],
  providers: [],
})

AppController 的某些路线上,我想做res.redirect('/books'),其中/books 是在AnotherController 中找到的路线。

由于某种原因,这不起作用,我无法确定它是不受支持还是我做错了。

【问题讨论】:

    标签: javascript node.js typescript express nestjs


    【解决方案1】:

    使用res.redirect(target) 从一个控制器重定向到另一个控制器。作为目标,您必须将控制器的路径和路由注释结合起来:

    @Controller('books') + @Get('greet') = /books/greet

    @Controller()
    export class AppController {
      @Get()
      redirect(@Res() res) {
        return res.redirect('/books/greet');
      }
    }
    
    @Controller('books')
    export class AnotherController {
      @Get('greet')
      greet() {
        return 'hello';
      }
    }
    

    在此处查看此运行示例:

    【讨论】:

    • 这确实是正确答案。奇怪的是,我将控制器保存在 2 个单独的文件中,但它不能那样工作。只有当我没有在@Controller() 中指定任何内容然后写@Get('/books/greet') 时它才有效。这很奇怪,因为这是我理解的默认设置。
    • 显然有另一条路线,如 /books/:id 写成 @Get(':id') 正在破坏它。
    【解决方案2】:

    另一种方法是使用@Redirect() 装饰器,如下所述: https://docs.nestjs.com/controllers#redirection

    这应该也可以:

    @Controller()
    export class AppController {
      @Get()
      @Redirect('books')
      redirect(){}
    }
    
    @Controller('books')
    export class AnotherController {
      @Get()
      getBooks() {
        return 'books';
      }
    }
    

    【讨论】:

    • 注意,这仅适用于 GET 方法,否则提供的任何 url 将首先发送 get 导致找不到端点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多