【问题标题】:How to change or extend express-graphql context without recreating the request handler?如何在不重新创建请求处理程序的情况下更改或扩展 express-graphql 上下文?
【发布时间】:2020-08-12 10:57:13
【问题描述】:

如何在不重新创建请求处理程序的情况下更改/扩展 express-graphql 上下文?

/** */
const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});
/** */
export default (req: any, res: any, context: any) => {
  console.log("context:", context);
  const handler = graphqlHTTP({
    schema,
    graphiql: process.env.NODE_ENV !== "production",
    context: {
      req,
      ...context,
    },
  });  
  return handler(req, res);
};

我注意到 graphqlHTTP 接受选项的承诺。
不知道这有什么帮助。 因为无论如何都需要为每个请求重新构建(req)=> Promise<Otions>(选项回调)?
我错过了什么?

注意:请忽略上下文构建实现,它可以是你喜欢的任何东西

这似乎可以解决问题,部分...

/** */
const handler = graphqlHTTP(async (req: any) => {  
  return {
    schema,
    graphiql: process.env.NODE_ENV !== "production",
    /** this doesn't work */
    context: {
      req,
      session: await getSession({ req }),
    },
  };
});

但是所有的上下文依赖都需要预先声明。 重建回调将需要构建处理程序。

谢谢

【问题讨论】:

    标签: node.js express-graphql


    【解决方案1】:

    鉴于缺乏反馈......我不确定我问的是“明显”还是明显错误:)。

    但是,...无论如何,这是我找到的最接近的

    /** */
    const handler = graphqlHTTP(async (req) => {  
      return {
        schema,
        graphiql: process.env.NODE_ENV !== "production",
        /** this doesn't work */
        context: {
          req,
          session: await getSession({ req }),
        },
      };
    });
    

    ...仍然可以让您单独通过外部方式构建自己的依赖关系图,例如动态导入、require、依赖注入、单例、HOC ...等

    【讨论】:

    • 对不起,如果我错了,但我会接受我自己的答案,这并不能真正回答太多......
    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2021-12-13
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多