Eu adicionei um afterwareLink que basicamente lê o cabeçalho da resposta e configura o token.
const afterwareLink = new ApolloLink((operation, forward) => {
return forward(operation).map(response => {
const context = operation.getContext();
const { response: { headers } } = context;
if (headers) {
const refreshToken = headers.get('x-refresh-token');
if (refreshToken) {
localStorage.setItem('refreshToken', refreshToken);
}
}
return response;
});
});
Meu pedido de links é assim
Eu tentei ambas as abordagens
let links = [elink, stateLink, setSiteIdHeaderLink, afterwareLink, httpLink]
let links = [elink, stateLink, setSiteIdHeaderLink, httpLink, afterwareLink]
Cada vez que imprimo os cabeçalhos de resposta está sempre vazio, mas posso vê-los no navegador que estão sendo enviados do servidor, mas não os estão recebendo em context
.
const context = operation.getContext();
Pacotes:
`` `
"apollo-boost": "^ 0.1.22",
"apollo-cache-inmemory": "^ 1.3.11",
"apollo-cache-persist": "^ 0.1.1",
"apollo-client": "^ 2.4.7",
"apollo-link": "^ 1.2.3",
"apollo-link-batch-http": "^ 1.2.8",
"apollo-link-http": "^ 1.5.9",
"apollo-link-retry": "^ 2.2.5",
"apollo-link-schema": "^ 1.1.1",
"apollo-link-token-refresh": "^ 0.2.3",
"apollo-link-ws": "^ 1.0.9",
I tried to use custom-fetch method event that didn't worked
const customFetch = (uri, opções) => {
deixe a promessa = buscar (uri, opções)
promessa
.então (resposta => {
deixe refreshToken = response.headers.get ('token-x')
console.log (refreshToken)
if (refreshToken) {
console.log (refreshToken)
}
resposta de retorno
})
.catch (e => {
jogue e
})
promessa de retorno
}
const httpLink = middlewareLink.concat (createHttpLink ({uri: API_URL, credentials: 'include', opts: {
credenciais: 'incluir'
}, fetch: customFetch}));
`` `
Você já encontrou uma solução? Estou enfrentando o mesmo problema. Posso ver no devtools que o cabeçalho de resposta que estou procurando está voltando, no entanto, o response.headers
é um construtor Headers
vazio no afterware.
Isso está funcionando para mim, mas gostaria de uma maneira legal de receber cabeçalhos de resposta com o cliente Apollo
`` `` javascript
importar {InMemoryCache} de "apollo-cache-inmemory"
importar {ApolloClient} de "apollo-client"
importar {ApolloLink} de "apollo-link"
importar {HttpLink} de "apollo-link-http"
importar fetch de "node-fetch"
const afterwareLink = new ApolloLink ((operação, encaminhamento) =>
encaminhar (operação) .map (resposta => {
const context = operation.getContext ()
const {
resposta: {cabeçalhos},
} = contexto
console.log(headers)
return response
})
)
const myfetch = fetch as any // este hack infelizmente não é necessário com o apollo-boost
const httpLink = new HttpLink ({uri: "http: // localhost: 4000 / graphql", fetch: myfetch})
links const = [afterwareLink, httpLink]
const link = ApolloLink.from (links)
const client = new ApolloClient ({link, cache: new InMemoryCache ()})
`` ``
Eu encontrei a resposta aqui: https://stackoverflow.com/questions/47443858/apollo-link-response-headers/58986484#58986484
Comentários muito úteis
Isso está funcionando para mim, mas gostaria de uma maneira legal de receber cabeçalhos de resposta com o cliente Apollo
`` `` javascript
importar {InMemoryCache} de "apollo-cache-inmemory"
importar {ApolloClient} de "apollo-client"
importar {ApolloLink} de "apollo-link"
importar {HttpLink} de "apollo-link-http"
importar fetch de "node-fetch"
const afterwareLink = new ApolloLink ((operação, encaminhamento) =>
encaminhar (operação) .map (resposta => {
const context = operation.getContext ()
const {
resposta: {cabeçalhos},
} = contexto
)
const myfetch = fetch as any // este hack infelizmente não é necessário com o apollo-boost
const httpLink = new HttpLink ({uri: "http: // localhost: 4000 / graphql", fetch: myfetch})
links const = [afterwareLink, httpLink]
const link = ApolloLink.from (links)
const client = new ApolloClient ({link, cache: new InMemoryCache ()})
`` ``