Как мне установить заголовок ответа с сервера, использующего сервер apollo?

У меня есть приложение, которое обновляет токен пользователя, когда он истек. Мне нужно обновить клиента с этим токеном, чтобы предотвратить ошибку. У меня возникли проблемы с переносом нового токена во внешний интерфейс, так как в ответе, похоже, нет возможности что-либо установить. Я использую Graphql и паспорт на моем бэкэнде, если это поможет.

Я пробовал res.send, res.setheader и т. Д...

Кто-нибудь знает, как отправить новую запись заголовка с сервера Apollo клиенту Apollo?

1 ответ

я думаю formatResponseАргумент вашего конструктора ApolloServer должен вам помочь. Это позволяет обрабатывать ответы сервера до их отправки в клиентские приложения. Функция принимает a и GraphQLRequestContextв качестве ввода и возвращает. Интерфейс для GraphQLResponseвыглядит следующим образом :

      export interface GraphQLResponse {
  data?: Record<string, any> | null;
  errors?: ReadonlyArray<GraphQLFormattedError>;
  extensions?: Record<string, any>;
  http?: Pick<Response, 'headers'> & Partial<Pick<Mutable<Response>, 'status'>>;
}

Это означает, что вы можете настроить свой сервер с дополнительным аргументом для анализа ответов перед их отправкой клиенту:

      const myServer = new ApolloServer(
   ...,
   formatResponse: (response, requestContext) => {
       // then create a new response here with your additional headers and return it, for instance
       const newResponse = { ...response, http: { response.http, { headers: ...response.http.headers, newHeader: newValue };
       return newResponse;
   }

Обратите внимание, что приведенное выше является только скелетом, вам нужно будет проверить объект ответа более тщательно, чем это, поскольку его свойства в значительной степени необязательны, но это должно дать вам суть.

Подробнее см. Документацию здесь

Другие вопросы по тегам