Saltar al contenido

nestjs intercepta y modifica la solicitud http saliente

Te sugerimos que revises esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Primero tratemos con

Intenté usar Interceptors en vano, la entrada solicitud https son interceptados pero no los salientes.

De acuerdo con la documentación https://docs.nestjs.com/interceptors, debería ser totalmente posible interceptar la respuesta.

@Injectable()
export class TransformHeadersInterceptor implements NestInterceptor 
  intercept(
    context: ExecutionContext,
    call$: Observable,
  ): Observable 
    // 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$;
  

Si desea manipular encabezados en función de los datos de respuesta. Puede acceder a los datos de esta manera:

return call$.pipe(map(data => 
    // Your code here
    return data;
));

Tengo algunos pensamientos sobre:

Tengo una aplicación NestJS que intenta realizar una solicitud http a una API externa. Me gustaría poder interceptar esta solicitud saliente y modificar los encabezados antes de ejecutarla.

Así que creo que hay dos casos de uso. Primero, tiene un conjunto de encabezados predeterminados, que se asignan al cliente http inicialmente y enviar con cada solicitud. P.ej:

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',
        ,
      );
    ,
  ,
];

Y segundo, crea y asigna encabezados por solicitud. Esto es cuando usas interceptores. En el contexto de la autenticación, podría pensar en usar un guardia, como sugiere tano en su respuesta.

Tuve un problema similar al modificar/agregar encabezados de respuesta. El siguiente código funcionó para mí:

@Injectable()
export class TransformHeadersInterceptor implements NestInterceptor 
  intercept(
    context: ExecutionContext,
    call$: Observable,
  ): Observable 

    return call$.pipe(
            map((data) => 
                // pipe call to add / modify header(s) after remote method
                let req = context.switchToHttp().getRequest();
                req.res.header('x-api-key', 'pretty secure');
                return data;
            ),
        );
  

Agradecemos que quieras asistir nuestra misión poniendo un comentario o dejando una valoración te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *