将自定义对象返回到GraphQL解析器

问题描述 投票:0回答:1

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

这是针对具有GraphQL设置的Node-Express后端服务器。我尝试了序列化,但是我正在测试一种新方法,在该方法中,我需要将一个对象作为输出传递到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;
        }
      }
    }
  }
});

查询输出的结果是

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

当我返回普通对象即ASB [0]

{
     sampleID: 1,
     sampleText: 'sample1'
}

我正在GraphQL中获得输出,但是当返回整个ASB对象时,我将无法输出。

javascript node.js sql-server express graphql
1个回答
0
投票

问题是您将类型声明为单项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;
        }
      }
    }
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.