Давайте сначала разберемся с
Я пытался использовать перехватчики безрезультатно, входящие запросы 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, которое пытается сделать http-запрос навнешний 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',
},
});
},
},
];
И, во-вторых, вы создаете и назначаете заголовки для каждого запроса.Это когда вы используете перехватчики.В контексте аутентификации вы можете подумать об использовании охраны, как предлагает Тано в своем ответе.