Graphql 如何在不重新启动服务的情况下更新架构

Graphql 如何在不重新启动服务的情况下更新架构,graphql,apollo-server,Graphql,Apollo Server,我的程序使用apollo服务器koa作为graphql服务,我想动态更新模式。例如: -当用户将数据上载到服务器时,还需要更新架构,但不需要重新启动服务。 我阅读了模式转换和模式缝合,但它们不符合我的要求。 任何人都可以给我一个建议。 非常感谢你 我是用阿波罗服务器做的-express@1.3.2. 我还没有转换到2岁,我没有做膝关节炎,但我想大概是一样的。如果没有,希望至少有帮助 const { graphqlExpress } = require('apollo-server-express


我的程序使用apollo服务器koa作为graphql服务,我想动态更新模式。例如:
-当用户将数据上载到服务器时,还需要更新架构,但不需要重新启动服务。
我阅读了模式转换和模式缝合,但它们不符合我的要求。
任何人都可以给我一个建议。

非常感谢你

我是用阿波罗服务器做的-express@1.3.2. 我还没有转换到2岁,我没有做膝关节炎,但我想大概是一样的。如果没有,希望至少有帮助

const { graphqlExpress } = require('apollo-server-express')
let schema = loadRemoteSchemas() // this loads it on start-up

app.use(async (req, res) => {
  return {
    schema: await schema,
  }
}

app.use('refresh', async (req, res) => {
  // some middleware that does stuff and changes the `schema` pointer
})

在特定情况下,我想同时更新typedef和resolverApollo,它们不支持动态更新模式。如果您想这样做,您需要设置自己的中间件,重新创建每个请求的模式,并自己调用
graphql
execute
函数。我知道这一点,但我的项目使用apollo server 2,但在您的解决方案中,我发现它的性能不好,因为服务器必须为每个请求重新构建模式,这是不应该的
loadRemoteSchemas()
仅在启动时以这种方式编写时被调用。因为它已经是一个解析承诺,所以每次调用
wait schema
时,它只会使用预取的值。如果
loadRemoteSchemas()
位于中间件内部,那么它将在每次请求时进行重建。