Разрешить данные, возвращаемые из psql, в graphql

Я пытаюсь добавить graphQL в свое существующее приложение. В настоящее время я поддерживаю конечные точки Express с помощью вызовов psql db. Я стремлюсь использовать psql для доступа к моим данным, а затем использовать результаты этих запросов в моем «решает» graphQL.

Вот пример моего вызова psql db:

'use strict';

const config = require('../../config');
const PostgresDAO = require('core/src/server/db/dao/postgres');
const postgresRW = new PostgresDAO(config.postgresRW);

function getById(id) {
  postgresRW.queryOne(
    `
      SELECT id, email, create_date
      FROM gamesDB.players
      WHERE id = $1;
    `,
    [id],
    function(err, result) {
      console.log(result);
      return result;
    }
  );
}

module.exports = {
  getById: getById
}

Вот моя схема graphQL:

'use strict';

const graphql = require('graphql');
const Player = require('./types/player');
const db = require('../db');

const RootQueryType = new graphql.GraphQLObjectType({
  name: 'RootQueryType',
  fields: {
    player: {
      type: Player,
      description: 'The current player identified by an ID.',
      args: {
        key: {
          type: new graphql.GraphQLNonNull(graphql.GraphQLString)
        }
      },
      resolve: (obj, args) => {
        return db.players.getById(args.key);
      }
    }
  }
});

const testSchema = new graphql.GraphQLSchema({
  query: RootQueryType
});

module.exports = testSchema;

Проблема, кажется, кроется в моем решении, поскольку каждый раз, когда я запрашиваю игрока из интерфейса graphiql, я вижу, что правильная информация игрока правильно регистрируется на моем сервере, но результат в интерфейсе graphiql равен null. Есть идеи, что я здесь делаю не так?


person MattDionis    schedule 28.12.2016    source источник
comment
Что это за тип PostgresDAO на самом деле? Может быть, вы неправильно используете метод queryOne, например, он возвращает обещание?   -  person vitaly-t    schedule 31.12.2016


Ответы (1)


Вам нужно сделать так, чтобы Player.getById возвращал обещание, которое содержит результат обратного вызова.

Вероятно (полностью непроверенный код):

function getById(id) {
  return new Promise(function(resolve, reject) {
    postgresRW.queryOne(
      `
        SELECT id, email, create_date
        FROM gamesDB.players
        WHERE id = $1;
      `,
      [id],
      function(err, result) {
        if (err) reject(err);
        else resolve(result);
      }
    );
  });
}
person Todd Berman    schedule 31.12.2016