デフォルトのacceptヘッダーは*/*
に設定されています:
しかし、応答がjsonであると誤って想定し、 bodyText
のコンテンツタイプをチェックせずにJSON.parse(bodyText)
を試行します。
サーバーが403 text/plain
を返す場合、たとえば次のようになります。
HTTP/1.1 403 Forbidden
Content-Type: text/plain; charset=utf-8
Content-Length: 18
Date: Sun, 25 Mar 2018 20:08:00 GMT
Connection: keep-alive
Invalid CSRF token
Apolloは奇妙なエラーをスローします:
overview.js:80369 Error: Network error: Unexpected token I in JSON at position 0
at new ApolloError (overview.js:70404)
at ObservableQuery.webpackJsonp.../../../../../public/next/next-apollo/node_modules/.registry.npmjs.org/apollo-client/2.2.0/node_modules/apollo-client/core/ObservableQuery.js.ObservableQuery.currentResult (overview.js:68953)
at ProxyComponent.Query._this.getQueryResult (overview.js:52088)
at ProxyComponent.webpackJsonp.../../../../../../node_modules/.registry.npmjs.org/react-apollo/2.1.0-rc.3/node_modules/react-apollo/Query.js.Query.render (overview.js:52184)
at ProxyComponent.proxiedRender (main.js:38683)
at finishClassComponent (main.js:30599)
at updateClassComponent (main.js:30576)
at beginWork (main.js:30951)
at performUnitOfWork (main.js:32950)
at workLoop (main.js:33014)
予想される行動
実際の動作
_単純_再生産
発行ラベル
バンプ。 501エラーで同じことが発生しました。 Error: Network error: Unexpected token N in JSON at position 0
。
応答が有効なJSONではないようです。 この行の前に、サーバーが何を返しているかを確認してください。
console.log(bodyText);
return JSON.parse(bodyText);
私たちが時々前に持っているプロキシのために、私たちは(Netflixで)これと同じ問題に遭遇します。 現在、これをリアクティブな方法で処理するためにフェッチをラップすることを考えています。
const customFetch = (uri, options) => {
return fetch(uri, options).catch(
err => {
// If it's our Content-Type issue from our proxy,
// reformat the error to match Apollo
throw new Error(...)
}
};
const link = createHttpLink({ fetch: customFetch });
またはプロアクティブな方法で-検証を行ってから渡します。
最も参考になるコメント
私たちが時々前に持っているプロキシのために、私たちは(Netflixで)これと同じ問題に遭遇します。 現在、これをリアクティブな方法で処理するためにフェッチをラップすることを考えています。
またはプロアクティブな方法で-検証を行ってから渡します。