首先,我实际上是在Stack Overflow上发帖的新手,但我当然会尽我所能在此处提供所有相关信息并分享找到的解决方案,因为我可以想象会有更多的人对此感到麻烦。
因此,我们从一个以多个小型微服务为后端的系统开始,我们发现了Apollo服务器,它能够从graphql端点检索模式并将它们缝合在一起,因此我们可以有一个不错的切入点。我们已经可以工作了,但是apollo服务器并没有真正帮助总体架构的工具。那就是我们找到NestJS的原因,因为我们在前端使用了angular,并且NestJS非常相似,因此看起来很合适。
但是,我们遇到的问题是我们似乎无法使以下功能正常工作:-我希望有一个模块,其中包含可以被赋予多个端点(从uri到微服务)的服务-具有这些功能给定的服务应从这些端点检索graphQL模式,并将其制成RemoteExecutableSchemas,然后将它们合并。-合并它们并使用(远程)链接信息制作1个大架构,以便graphQL知道从何处获取数据。-发生这种情况后,我们想添加一些针脚以使所有关系都存在(但这不是我的问题所在)
我一直在浏览官方文档(https://docs.nestjs.com/graphql/quick-start)的示例(https://github.com/nestjs/nest/tree/master/sample/ 12-graphql-apollo),当然也签出了github项目(https://github.com/nestjs/graphql),并在此仓库中整理了一下代码,以查看代码在后台执行的操作。
我们已经尝试了几种方法来即时获取它们,但是无法在实例化之前将模式放入GraphQLModule中。然后,我们认为让服务从端点检索graphqlSchema并使用实际起作用的printSchema(schema)将其写入文件中是可以接受的,但是随后我丢失了链接信息,从而使该信息成为本地模式而不是远程模式。现在,我们提出了以下建议,但再次陷入困境。
让我们从我的package.json中的一个小片段开始,以便人们知道版本:)
"dependencies": {
"@nestjs/common": "^5.4.0",
"@nestjs/core": "^5.4.0",
"@nestjs/graphql": "^5.5.1",
"apollo-link-http": "^1.5.9",
"apollo-server-express": "^2.3.2",
"graphql": "^14.1.1",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.2.2",
"typescript": "^3.0.1"
},
"devDependencies": {
"@nestjs/testing": "^5.1.0",
"@types/express": "^4.16.0",
"@types/jest": "^23.3.1",
"@types/node": "^10.7.1",
"@types/supertest": "^2.0.5",
"jest": "^23.5.0",
"nodemon": "^1.18.3",
"prettier": "^1.14.2",
"supertest": "^3.1.0",
"ts-jest": "^23.1.3",
"ts-loader": "^4.4.2",
"ts-node": "^7.0.1",
"tsconfig-paths": "^3.5.0",
"tslint": "5.11.0"
},
Run Code Online (Sandbox Code Playgroud)
因此,目前我有一个架构处理程序模块,如下所示:
@Module({
imports: [GraphQLModule.forRootAsync({
useClass: GqlConfigService
})],
controllers: [SchemaHandlerController],
providers: …Run Code Online (Sandbox Code Playgroud)