javascript - NestJs 重定向而不使用响应
问题描述
是否可以在不使用对象的情况下从 Nest 控制器进行重定向Response
?
现在我知道我们只能通过直接将Response
对象注入到路由处理程序中来做到这一点。
解决方案
你可以写一个RedirectInterceptor
:
@Injectable()
export class RedirectInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, stream$: Observable<any>): Observable<any> {
const response = context.switchToHttp().getResponse();
response.redirect('redirect-target');
return stream$;
}
}
然后像这样在你的控制器中使用它:
@Get('user')
@UseInterceptors(RedirectInterceptor)
getUser() {
// will be redirected.
}
重要的是不要从您的控制器返回任何内容,否则您将收到以下错误:Can't set headers after they are sent.
如果需要,RedirectInterceptor
也可以是动态的:
@Injectable()
export class RedirectInterceptor implements NestInterceptor {
constructor(private readonly target: string) {}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
intercept(context: ExecutionContext, stream$: Observable<any>): Observable<any> {
const response = context.switchToHttp().getResponse();
response.redirect(this.target);
^^^^^^^^^^^
return stream$;
}
}
然后在控制器中:
@UseInterceptors(new RedirectInterceptor('redirect-target'))
推荐阅读
- javascript - UL 元素宽度不随 JS 变化
- snakemake - 关于并行化开销和 I/O 绑定规则的问题
- sql-server - X 个读取唯一键的 azure 函数应用实例
- android - Pixel 2 XL (Android 10) 到三星 Galaxy S8+ (Android 9) SMS_RECEIVED 没有触发 CPIM-MESSAGE
- python - Python 中的 else if 语句
- onedrive - OneDrive REST API 嵌入下载网址
- vb.net - 如果有的话,与 vb.Net 2.0 兼容的最新 Serilog 版本是什么(是的,我知道...)?
- python - 使用apply在pandas数据框中的其他列中查找列值?
- python - 如何使用 Python 的 configparser 处理大的 .ini 文件?
- c++ - 新关键字有何不同?