Graphql - Apollo 服务器 - 热更新模式
Graphql - Apollo Server - Hot update schema
我希望在我的 apollo-server-express 服务器上热重载我的 GraphQL 模式。任何人都知道如何做到这一点?
我目前正在使用模式拼接来收集多个 API 的模式,但是我不想每次这些模式之一发生变化时都必须重新启动我的应用程序。
我试图寻找快速路线并将其删除,但没有用,我还尝试在同一路线上再次调用 graphQLExpress()
,但没有更新它。
感谢您的帮助!
我设法通过删除快速路线然后重新创建它来完成它。但实际上我发现,因为 makeRemoteExecutableSchema
在每次请求时都会发送内省查询,所以您实际上不需要更新架构,它会自行更新。但这并不意味着 Graphiql。
我深入研究了 graphqlExpress
调用,它相当轻巧,只是 returns 使用提供的模式的中间件函数。我能够通过包装确保它始终使用我的最新模式:
let schema = createSchema();
app.use('/graphql', bodyParser.json(), function(req, res, next) {
// ensure latest schema is always passed in, we'll reload it automatically
const graphql = graphqlExpress({ schema });
graphql(req, res, next);
});
我目前正在使用本地/静态架构,因此文件观察器允许我根据需要在此处更新 schema
。
我希望在我的 apollo-server-express 服务器上热重载我的 GraphQL 模式。任何人都知道如何做到这一点?
我目前正在使用模式拼接来收集多个 API 的模式,但是我不想每次这些模式之一发生变化时都必须重新启动我的应用程序。
我试图寻找快速路线并将其删除,但没有用,我还尝试在同一路线上再次调用 graphQLExpress()
,但没有更新它。
感谢您的帮助!
我设法通过删除快速路线然后重新创建它来完成它。但实际上我发现,因为 makeRemoteExecutableSchema
在每次请求时都会发送内省查询,所以您实际上不需要更新架构,它会自行更新。但这并不意味着 Graphiql。
我深入研究了 graphqlExpress
调用,它相当轻巧,只是 returns 使用提供的模式的中间件函数。我能够通过包装确保它始终使用我的最新模式:
let schema = createSchema();
app.use('/graphql', bodyParser.json(), function(req, res, next) {
// ensure latest schema is always passed in, we'll reload it automatically
const graphql = graphqlExpress({ schema });
graphql(req, res, next);
});
我目前正在使用本地/静态架构,因此文件观察器允许我根据需要在此处更新 schema
。