У меня есть GraphQL API, который должен возвращать данные из базы данных MySQL и PostGres. В преобразователях у меня есть console.log с результатами и я могу просматривать данные в терминале.

address: {
      type: AddressType,
      description: "An Address",
      args: {
        id: { type: GraphQLInt },
      },
      resolve: (parent, args) => {
        // Make a connection to MySQL
        let result;
        connection.query(
          `SELECT * FROM addresses WHERE id = ${args.id}`,
          (err, res, fields) => {
            if (err) console.log(err);
            console.log("========");
            console.log(res);
            console.log("+++++++++");
            console.log(res[0]);

            // console.log(result);
          }
        );
        return result;
      },
    },

В терминале я вижу результаты, когда запускаю запрос на GraphiQL:

[nodemon] starting `node schema.js`
Server is running
Connected to PSQL database.
Connected to mySQL database.
========
[
  RowDataPacket {
    id: 1,
    address_type: 'House',
    status: 'Inactive',
    entity: 'Building',
    number_and_street: 'PO BOX 276',
    suite_and_apartment: 'PO',
    city: 'Ennis',
    postal_code: '59729-0276',
    country: 'USA',
    notes: 'Dolorem quia repellendus et et nobis.',
    created_at: 2020-12-18T05:00:00.000Z,
    updated_at: 2021-05-21T04:00:00.000Z,
    latitude: null,
    longitude: null
  }
]
+++++++++
RowDataPacket {
  id: 1,
  address_type: 'House',
  status: 'Inactive',
  entity: 'Building',
  number_and_street: 'PO BOX 276',
  suite_and_apartment: 'PO',
  city: 'Ennis',
  postal_code: '59729-0276',
  country: 'USA',
  notes: 'Dolorem quia repellendus et et nobis.',
  created_at: 2020-12-18T05:00:00.000Z,
  updated_at: 2021-05-21T04:00:00.000Z,
  latitude: null,
  longitude: null
}

Однако на GraphiQL я получаю значение null для данных. Вход:

{
  address(id: 1) {
    address_type
  }
  }

Выход:

{
  "data": {
    "address": null
  }
}

Я новичок в GraphQL. Что я мог здесь упустить? Я пытаюсь получить эту информацию из терминала, чтобы отображать ее при запросе в GraphiQL. Просто пытаюсь узнать больше.

0
Jake 26 Ноя 2021 в 17:14

1 ответ

Лучший ответ

Классическая проблема с невниманием: Вы используете переменную res для консоли. И нигде вы не присваиваете значение result.

И return result выполняется до выполнения запроса. (вне контекста, где у вас есть данные)

См. Документацию о том, как использовать синтаксис async / await. В настоящее время вы используете обратные вызовы - это не рекомендуемый синтаксис.

1
bato3 26 Ноя 2021 в 17:34
Сейчас я разберусь, спасибо!
 – 
Jake
26 Ноя 2021 в 17:45