我使用 GraphQL Gateway 与 GraphQL Federation Microservices 集成。但出于某种原因,我使用了一些 Rest API 代码。喜欢(刷新令牌,上传图片休息)
问题是:如何与来自 graphql 网关的其他服务的 Rest API 通信以及如何将上下文发送到控制器(rest api)服务器。
import { IntrospectAndCompose, RemoteGraphQLDataSource } from '@apollo/gateway';
import { ApolloGatewayDriver, ApolloGatewayDriverConfig } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { AppController } from './app.controller';
@Module({
imports: [
GraphQLModule.forRoot<ApolloGatewayDriverConfig>({
driver: ApolloGatewayDriver,
server: {
// ... Apollo server options
context: ({ req, res }) => ({
authorization:req.headers.authorization,
req,
res,
url: req.protocol + '://' + req.headers.host,
}),
cors: true,
},
gateway: {
buildService({ name, url }) {
return new RemoteGraphQLDataSource({
url,
willSendRequest({ request, context }) {
request.http.headers.set('authorization',context['authorization'] );
}
});
},
supergraphSdl: new IntrospectAndCompose({
subgraphs: [
{ name: 'Service1', url: 'http://localhost:3001/graphql' },
{ name: 'Service2', url: 'http://localhost:3002/graphql' },
{ name: 'Service3' , url: 'http://localhost:3003/graphql' }
],
}),
},
}),
],controllers:[AppController]
})
export class AppModule { }
注意:如果我从 Url 中删除 '/graphql' 以访问原始 url ,它会给我错误 [Couldn't load service definitions for service1] 。
此代码适用于 GraphQL,但不适用于 Rest。
服务器:NestJS。
谢谢..