GraphQL: невозможно прочитать заголовки ответа в клиенте Apollo - PullRequest
0 голосов
/ 04 марта 2019

Я хотел бы прочитать заголовок ответа с помощью Apollo Client, но не могу.

Я использую сервер Apollo и клиент Apollo для обмена данными с API GraphQL и хотел бы отправлять заголовки туда и обратно.Я настроил клиент так, чтобы он отправлял заголовок x-client-version, и я настроил сервер так, чтобы он также иногда отвечал тем же заголовком.

Проблема заключается в том, что при попытке прочитатьзаголовок x-client-version (или любой другой заголовок) с клиентом Apollo, я получаю неопределенный.Ниже я настроил некоторые Afterware, основываясь на примерах, которые я нашел в Интернете, и даже пошаговых руководствах YouTube:

const clientVersionAfterware = new ApolloLink((operation, forward) =>
  forward(operation).map(response => {
    const {
      response: { headers },
    } = operation.getContext();
    console.log(headers);
    if (headers) {
      const token = headers.get("x-client-version");
      console.log(token);
      if (token) {
        localStorage.setItem("clientVersion", token);
      }
    }

    return response;
  }),
);

Прикрепите его к цепочке ссылок:

    const httpLink = handleErrors.concat(
  clientVersionAfterware.concat(new HttpLink(linkOptions)),
);
const batchHttpLink = handleErrors.concat(
  clientVersionAfterware.concat(
    new BatchHttpLink({ ...linkOptions, batchInterval: 10 }),
  ),
);

В конечном счете, подключение ссылок вКонструктор ApolloClient:

new ApolloClient({
    link: split(
      ({ operationName = "" }) => operationName.startsWith("findOrCreate"),
      httpLink,
      batchHttpLink,
    ),
    cache,
    ...opts,
  });

Я слышал, что объект заголовков пуст, но заголовки все еще можно прочитать, но это определенно не так в моем опыте.Я вижу, что сервер действительно возвращает заголовок x-client-version, который я ожидаю прочитать:

Chrome Response Headers

Я подумал, что, возможно, обновление моих пакетов поможет, но они этого не сделали.Версии, которые я использую:

"apollo-cache-inmemory": "^1.5.1",
"apollo-client": "^2.5.1",
"apollo-link-batch-http": "^1.2.4",
"apollo-link-error": "^1.1.2",
"apollo-link-http": "^1.5.11",

Что-то мне не хватает?Заранее спасибо!

1 Ответ

0 голосов
/ 06 марта 2019

Я разобрался.

Оказывается, обновления apollo-client недостаточно.Я обновил следующие пакеты, и теперь объект headers заполнен:

"apollo-link-batch-http": "^1.2.9",
"apollo-link-error": "^1.1.8",
"apollo-link-http": "^1.5.12",

Я уверен, что вам не нужно обновлять apollo-link-error, но двух других должно хватить (особенно apollo-link-http).

...