首页 > 解决方案 > GraphQL 和从 Oracle DB 中提取数据:查询以结果集响应并且不进入 Graphql 解析器窗口

问题描述

我是 GraphQL 的新手。

开始开发 GraphQL 应用程序以从 oracle 数据库中提取数据。

这是一个非常简单的应用程序。查询以 响应,resultset并且可以在console.log;中看到结果 但是,它不会出现在graphql窗口中(响应/解析器窗口)。它抛出错误

无法为非 User.email 返回 null

我在oracle连接中尝试了promise。不确定,为什么它没有在 GraphQL 中显示数据。

用户类型.js

module.exports = new GraphQLObjectType({
  name: 'User',

  fields: () => {
    return{
      id: { type: GraphQLID },
      email: { type: new GraphQLNonNull(GraphQLString) }
    }
  }
});

DBConnection.js

module.exports = oraPool => {
  return  {
    getUsers(apiKey){
      return oracledb.createPool(oraConfig).then(function() {
    console.log("Connection Pool created");
    return oracledb.getConnection().then(function(conn) {
      return conn.execute(
        //`SELECT 'User ' || JSON_OBJECT ('id' VALUE id, 'email' VALUE email) FROM users where id = :id`
        `SELECT  * FROM users WHERE id = :id`
        ,[apiKey]).then(result => {
          //console.log(result.metaData);
          console.log(humps.camelizeKeys(result.rows[0]));
          conn.close();
          return humps.camelizeKeys(result.rows[0]);
        })
        .catch(function(err) {
          console.log(err.message);
          return connection.close();
        });
      })
      .catch(function(err) {
        console.error(err.message);
      });
    })
      }
    }
  }

类型.js

const RootQueryType = new GraphQLObjectType({
  name: 'RootQueryType',

  fields: {
    user: {
      type: UserType,
      args: {
    key: { type: new GraphQLNonNull(GraphQLString) }
      },
      resolve: (obj, args, { oraPool }) => {
    return oradb(oraPool).getUsers(args.key);
      }

    }
  }
});

标签: node.jsgraphqlgraphql-jsexpress-graphqlnode-oracledb

解决方案


这段代码很纠结,我建议从头开始。例如,您createPool每次运行查询时都会调用。您应该在应用程序初始化期间创建池。

尽管您说这将是一个简单的应用程序,但它总是可以增长的。从头开始创建 GraphQL 服务器并非易事。我建议通过 join-monster 提供一些帮助。不幸的是,join-monster 不再被积极开发。但它非常稳定,比从头开始要好得多。这是它如何工作的一个很好的概述: https ://github.com/stems/join-monster/tree/master/src

我最近做了一个关于 GraphQL 的演讲,你可以在这里看到:https ://www.slideshare.net/DanielMcGhan/intro-to-graphql-for-database-developers

对于演示,我采用了我在本博客系列中描述的一个简单 API 模式,并将其调整为常见 EMP 和 DEPT 演示表上的 GraphQL 服务器。您可以在此处访问代码: https ://www.dropbox.com/s/cnvyrlik7irtbwm/graphql-api.zip?dl=0

另外,我的另一位同事在这里谈论 GraphQL: https ://blogs.oracle.com/opal/demo:-graphql-with-node-oracledb


推荐阅读