Как мне установить заголовок ответа с сервера, использующего сервер 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;
}
Обратите внимание, что приведенное выше является только скелетом, вам нужно будет проверить объект ответа более тщательно, чем это, поскольку его свойства в значительной степени необязательны, но это должно дать вам суть.
Подробнее см. Документацию здесь