graphql federation -- gateway 没有转发 RESPONSE 标头



我有一个带网关和子图的node + nest graphql api。

我已经将REQUEST标头配置为转发到我的子图。我现在遇到的问题是相反的,似乎网关剥离了子图设置的任何自定义响应头。

我可以确认这发生在本地开发期间,所以它不是由我的生产基础设施引起的。

但是为了方便,在生产中直接与子图通信,自定义报头存在于响应报头中。

我只能断定这是网关配置级别的问题。

编辑:

同时找到解决方案:

gateway: {
buildService: ({ name, url }) => {
return new RemoteGraphQLDataSource({
url,
didReceiveResponse({ response, context }) {
const header = response?.http?.headers?.get('traceid');
if (header) {
(context?.req?.res as Response)?.setHeader(
'traceId',
header
);
}
return response;
},
});
},

如果你正在使用NestJS GraphQL与fasttify和Apollo Federation Gateway,你可以通过这种方式从子图传递标题到客户端:

...
gateway: {
buildService: ({ name, url }) => {
return new RemoteGraphQLDataSource({
...
didReceiveResponse({ response, request, context }) {
const headers = response?.http?.headers;
headers?.forEach((value, key) => {
context?.reply?.header?.(key, value);
});
return response;
},
});
},
...
},

最新更新