Nest.Js 从一个控制器重定向到另一个

Posted

技术标签:

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

所以我有这个模块:

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

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

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

【问题讨论】:

【参考方案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 导致找不到端点

以上是关于Nest.Js 从一个控制器重定向到另一个的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 内部从控制器重定向到另一个控制器

将 segue 从一个视图控制器重定向到另一个视图控制器

Ionic Framework:无法从我的控制器重定向到另一个页面?

如何使用命名 URL 映射从控制器重定向?

如何在 IOS 应用程序中从视图控制器重定向回主故事板

使用“RedirectToAction”从控制器重定向到哈希