Apollo-link: o cabeçalho está sempre vazio para cada resposta recebida no cliente do servidor

Criado em 18 mai. 2019  ·  3Comentários  ·  Fonte: apollographql/apollo-link

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();

Screen Shot 2019-05-18 at 3 31 44 PM
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}));
`` `

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

    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 ()})

`` ``

Todos 3 comentários

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 ()})

`` ``

Esta página foi útil?
0 / 5 - 0 avaliações