【问题标题】:Return custom object to GraphQL resolver将自定义对象返回给 GraphQL 解析器
【发布时间】:2020-02-21 13:11:10
【问题描述】:

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

这适用于带有 GraphQL 设置的 Node-Express 后端服务器。我尝试了 sequelized,但我正在测试一种新方法,我需要将一个对象作为输出传递给 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】:

    问题是您将类型声明为单个项目 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;
            }
          }
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2020-09-21
      • 1970-01-01
      • 2021-12-22
      • 2020-06-13
      • 2020-10-04
      • 2020-10-04
      • 2017-10-24
      • 2018-11-25
      相关资源
      最近更新 更多