GraphQL и извлечение данных из базы данных Oracle: запрос отвечает с Resultset и не приходит в окно распознавателя Graphql - PullRequest
0 голосов
/ 23 мая 2019

Я новичок в GraphQL.

Начата разработка приложения GraphQL для извлечения данных из базы данных Oracle.

Это очень простое приложение.На запрос отвечает resultset и результаты можно увидеть в console.log;однако, это не приходит к окну graphql (окно ответа / распознавателя).Выдает ошибку

Невозможно вернуть ноль для не User.email

Я попробовал обещание в соединении оракула.Не уверен, почему он не показывает данные в GraphQL.

UserType.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);
      });
    })
      }
    }
  }

Type.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);
      }

    }
  }
});

1 Ответ

0 голосов
/ 24 мая 2019

Этот код довольно запутанный, я рекомендую начинать с нуля.Например, вы звоните 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Я описал в эту серию блогов и адаптировал ее для сервера GraphQL на общих демонстрационных таблицах EMP и DEPT.Вы можете получить доступ к коду здесь: https://www.dropbox.com/s/cnvyrlik7irtbwm/graphql-api.zip?dl=0

Также еще один из моих коллег рассказывает о GraphQL здесь: https://blogs.oracle.com/opal/demo:-graphql-with-node-oracledb

...