在apollo 2中无需重新启动服务器即可更新graphql模式
我的项目有一种定义模式和解析器的声明式方式,它在一个单独的存储库中维护。我的graphql服务器轮询结果以查找架构的更新 使用阿波罗服务器-express@1,我可以直接访问graphqlExpress中间件,因此当模式发生变化时,我可以构建一个新的实例,然后扔掉旧的实例,类似这样在apollo 2中无需重新启动服务器即可更新graphql模式,graphql,apollo,graphql-js,Graphql,Apollo,Graphql Js,我的项目有一种定义模式和解析器的声明式方式,它在一个单独的存储库中维护。我的graphql服务器轮询结果以查找架构的更新 使用阿波罗服务器-express@1,我可以直接访问graphqlExpress中间件,因此当模式发生变化时,我可以构建一个新的实例,然后扔掉旧的实例,类似这样 const { graphqlExpress } = require('apollo-server-express'); let api; const constructAPI = () => {
const { graphqlExpress } = require('apollo-server-express');
let api;
const constructAPI = () => {
try {
const newSchema = createSchema();
api = graphqlExpress(({ headers }) => ({
schema: newSchema,
}));
logger.info({ event: 'GRAPHQL_SCHEMA_UPDATED' });
};
schemaPoller.on('change', constructAPI);
module.exports = router => {
// Note that we wrap the api controller in a function that passes
// the original args through because a new api controller is generated
// every time the schema changes. We can't pass express a direct
// reference to the api controller on startup, or it will
// never update the reference to point at the latest version of the
// controller using the latest schema
router
.route('/')
.get((...args) => api(...args))
.post((...args) => api(...args));
return router;
};
在阿波罗服务器中-express@2,对中间件的访问是隐藏的,有两种新的、更具声明性的使用库的方法,乍一看,这两种方法都不兼容在不停止服务器、获取新模式并重新开始使用新数据的情况下更新模式,这是我希望避免的停机时间
有人能建议一种让这个设置工作的方法吗apollo@2?