Apollo-link: クライアントでサーバーから受信した応答ごとに、ヘッダーは常に空です。

作成日 2019年05月18日  ·  3コメント  ·  ソース: apollographql/apollo-link

基本的に応答ヘッダーを読み取り、トークンを設定するafterwareLinkを追加しました。

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

私のリンクの順序は次のようになります
私は両方のアプローチを試しました
let links = [elink, stateLink, setSiteIdHeaderLink, afterwareLink, httpLink]

let links = [elink, stateLink, setSiteIdHeaderLink, httpLink, afterwareLink]

応答ヘッダーを印刷するたびに常に空になりますが、ブラウザーでサーバーから送信されているのにcontext受信されていないことがわかります。
const context = operation.getContext();

Screen Shot 2019-05-18 at 3 31 44 PM
パッケージ:

`` `
"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、options)=> {
約束をしましょう= fetch(uri、options)
約束
.then(response => {
let refreshToken = response.headers.get( 'token-x')
console.log(refreshToken)
if(refreshToken){
console.log(refreshToken)
}
応答を返す
})
.catch(e => {
eを投げる
})
リターンプロミス
}
const httpLink = middlewareLink.concat(createHttpLink({uri:API_URL、credentials: 'include'、opts:{
クレデンシャル:「含める」
}、フェッチ:customFetch}));
`` `

最も参考になるコメント

これは私にとってはうまくいきますが、apolloクライアントで応答ヘッダーを受信するためのいくつかの良い方法が欲しいです

`` `` javascript
「apollo-cache-inmemory」から{InMemoryCache}をインポートします
「apollo-client」から{ApolloClient}をインポートします
「apollo-link」から{ApolloLink}をインポートします
「apollo-link-http」から{HttpLink}をインポートします
「node-fetch」からのインポートフェッチ

const afterwareLink = new ApolloLink((operation、forward)=>
forward(operation).map(response => {
const context = operation.getContext()
const {
応答:{ヘッダー}、
} =コンテキスト

    console.log(headers) 

    return response
})


const myfetch = fetch as any //このハックは残念ながらapollo-boostでは必要ありません
const httpLink = new HttpLink({uri: "http:// localhost:4000 / graphql"、fetch:myfetch})

const Links = [afterwareLink、httpLink]
const link = ApolloLink.from(links)
const client = new ApolloClient({link、cache:new InMemoryCache()})

「」

全てのコメント3件

解決策を見つけたことがありますか? 私はこれと同じ問題を経験しています。 devtoolsで、探している応答ヘッダーが最終的に戻ってくることがわかりますが、 response.headersはアフターウェアの空のHeadersコンストラクターです。

これは私にとってはうまくいきますが、apolloクライアントで応答ヘッダーを受信するためのいくつかの良い方法が欲しいです

`` `` javascript
「apollo-cache-inmemory」から{InMemoryCache}をインポートします
「apollo-client」から{ApolloClient}をインポートします
「apollo-link」から{ApolloLink}をインポートします
「apollo-link-http」から{HttpLink}をインポートします
「node-fetch」からのインポートフェッチ

const afterwareLink = new ApolloLink((operation、forward)=>
forward(operation).map(response => {
const context = operation.getContext()
const {
応答:{ヘッダー}、
} =コンテキスト

    console.log(headers) 

    return response
})


const myfetch = fetch as any //このハックは残念ながらapollo-boostでは必要ありません
const httpLink = new HttpLink({uri: "http:// localhost:4000 / graphql"、fetch:myfetch})

const Links = [afterwareLink、httpLink]
const link = ApolloLink.from(links)
const client = new ApolloClient({link、cache:new InMemoryCache()})

「」

私はここで答えを見つけました: https

このページは役に立ちましたか?
0 / 5 - 0 評価