nestjs拦截并修改传出的http请求 [英] nestjs intercept and modify outgoing http request
本文介绍了nestjs拦截并修改传出的http请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以我很可能遗漏了什么或者做错了什么。 我有一个NestJS应用程序,它试图向外部API发出http请求。 我希望能够截取此传出请求并在执行之前修改其标头。
我已经尝试使用拦截器,但是没有用,传入的http请求会被拦截,但不会截获传出。 如有任何建议或帮助,我们将不胜感激。
推荐答案
我们先来处理
我已经尝试使用拦截器,但是没有用,传入的http请求 被截取,但不截获传出。
根据文档https://docs.nestjs.com/interceptors应该完全可以拦截响应。
@Injectable()
export class TransformHeadersInterceptor implements NestInterceptor {
intercept(
context: ExecutionContext,
call$: Observable<any>,
): Observable<any> {
// Get request headers, e.g.
const userAgent = context.switchToHttp().getRequest().headers['user-agent'];
// Not sure if headers are writeable like this, give it a try
context.switchToHttp().getResponse().headers['x-api-key'] = 'pretty secure';
return call$;
}
}
如果要根据响应数据操作标头。您可以按如下方式查看数据:
return call$.pipe(map(data => {
// Your code here
return data;
}));
我有一些想法:
我有一个NestJS应用程序正在尝试向 外部API。我希望能截获这封传出的邮件 在执行之前请求并修改其标头。
所以我认为有两个用例。首先,您有一组默认标头,这些标头最初分配给http客户端,并随每个请求一起发送。例如:
import { HTTP_TOKEN } from './constants';
import * as http from 'request-promise-native';
export const httpProviders: any = [
{
provide: HTTP_TOKEN,
useFactory: () => {
return http.defaults({
headers: {
'Accept': 'application/json',
'Content-type': 'application/json',
'User-agent': 'my-🍪-app',
},
});
},
},
];
其次,您可以为每个请求创建和分配标头。这是你使用拦截器的时候。在身份验证上下文中,您可以考虑使用警卫,就像tano在他的回答中建议的那样。
这篇关于nestjs拦截并修改传出的http请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文