我们首先来处理
我尝试使用拦截器但没有成功,传入的http请求
被拦截但不会传出。
根据文档https://docs.nestjs.com/interceptors 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',
},
});
},
},
];
其次,您为每个请求创建并分配标头。这是你使用拦截器的时候。在身份验证的背景下,您可以考虑使用警卫,就像塔诺在他的回答中建议的那样。