delegateToSchema 没有使用我的执行程序

问题描述

我想将一个字段从我的 graphql 服务委托给远程服务。我试图遵循文档,但我遗漏了一些东西。

const {wrapSchema,introspectSchema} = require('@graphql-tools/wrap');
const got = require('got');
const {print} = require('graphql');
const {delegateToSchema} = require('graphql-tools');

const executor = async ({document,variables}) => {
  const query = typeof document === 'string' ? document : print(document);
  return got.post('http://localhost:6677/graphql',{json: {query,variables}).json();
};

const makeRemoteSchema = async () => {
  return wrapSchema({
    schema: await introspectSchema(executor),executor
  });
};

const conversations = async ({id},_,context,info) => {
  const result = await delegateToSchema({
    schema: await makeRemoteSchema(),operation: 'query',fieldName: 'conversations',args: {
      consultationParticipantId: id,},info
  });
  return result;
};

结果是null。我可以看到它正在使用我的执行程序进行自省调用,通过在解析字段时它使用默认执行程序来代替,这基本上是一个无操作。通过逐步执行 delegateToSchema 代码,它似乎希望 schema 成为 schemaConfig。所以我尝试像这样删除 wrapSchema

const makeRemoteSchema = async () => {
  return {
    schema: await introspectSchema(executor),executor
  };
}

它使用我的执行程序而不是默认执行程序,但现在在执行程序中,query 被解析为空字符串,而 variables 是一个空对象。

你能看出我做错了什么吗?

我正在使用:

"graphql-tools": "^7.0.4","@graphql-tools/wrap": "^7.0.8",

我也试过 v6.2.4。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...