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 从一个控制器重定向到另一个的主要内容,如果未能解决你的问题,请参考以下文章