繁体   English   中英

返回自定义 object 到 GraphQL 解析器

[英]Return custom object to GraphQL resolver

我需要提供自定义 Object 作为 GraphQL 解析器的输出。

这适用于具有 GraphQL 设置的 Node-Express 后端服务器。 我尝试了续集,但我正在测试一种新方法,我需要将 object 作为 output 传递给 graphQL。

const RootQueryType = new GraphQLObjectType({
  name: "Query",
  fields: {
  Sample: {
      type: SampleType,
      args: {
        sampleID: { type: GraphQLID }
      },
      resolve: async (parent, args) => {
        try {
          const result = await sql.connect(config).then(pool =>
            pool
              .request()
              .input("sampleID", sql.Int, args.sampleID)
              .query(
                "SELECT * FROM samples WHERE sampleID = @sampleID"
              )
          );
          const ASB = await result.recordsets[0];
          console.log(ASB);
          sql.close();
          return ASB;
        } catch (err) {
          console.log(err);
          sql.close();
          return;
        }
      }
    }
  }
});

查询 output 的结果是

[
  {
     sampleID: 1,
     sampleText: 'sample1'
  },
  {
     sampleID: 2,
     sampleText: 'sample2'
  }
]

当我返回普通 object 即 ASB[0]

{
     sampleID: 1,
     sampleText: 'sample1'
}

我在 GraphQL 中得到 output 但是当返回整个 ASB object 时,我无法获得输出。

问题是您将类型声明为单项SampleType但返回SampleType数组

您可以通过将SampleType更改为new GraphQLList(SampleType)来修复它

const RootQueryType = new GraphQLObjectType({
  name: "Query",
  fields: {
  Sample: {
      type: new GraphQLList(SampleType), // THIS LINE !!!
      args: {
        sampleID: { type: GraphQLID }
      },
      resolve: async (parent, args) => {
        try {
          const result = await sql.connect(config).then(pool =>
            pool
              .request()
              .input("sampleID", sql.Int, args.sampleID)
              .query(
                "SELECT * FROM samples WHERE sampleID = @sampleID"
              )
          );
          const ASB = await result.recordsets[0];
          console.log(ASB);
          sql.close();
          return ASB;
        } catch (err) {
          console.log(err);
          sql.close();
          return;
        }
      }
    }
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM