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.