nestjs拦截并修改传出的http请求 [英] nestjs intercept and modify outgoing http request

查看:15
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆