基本的に応答ヘッダーを読み取り、トークンを設定する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();
パッケージ:
`` `
"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}));
`` `
解決策を見つけたことがありますか? 私はこれと同じ問題を経験しています。 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 :
最も参考になるコメント
これは私にとってはうまくいきますが、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 {
応答:{ヘッダー}、
} =コンテキスト
)
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()})
「」