Axios: インターセプターでbaseURLを設定しても機能しません。

作成日 2017年06月09日  ·  3コメント  ·  ソース: axios/axios

概要

インターセプターでbaseURLを設定しても機能しません。

const service = axios.create({
  baseURL: 'http://localhost/'
});

service.interceptors.request.use(config => {

  config.baseURL = 'dd'
  console.log(config.url) // output :  http://localhost/././../

  return config;
}, error => {
  // Do something with request error
  console.error(error); // for debug
  Promise.reject(error);
})

環境

  • axiosバージョン:
  • 環境:例:ノードvv8.0.0、chrome 59.0.3071.86、macOS 10.12

最も参考になるコメント

同じ問題が発生しました。 これは、実装の詳細というよりも概念的な問題である可能性があります。 baseURLを設定することは、「これをすべてのリクエストに追加する」という言い方のように思えます。これは、すべてのリクエストに設定すると意味がないように見えます。 ケースは間違いなく次のような条件付きで作成できますが、

axios.interceptors.request.use((config) => {
  return getAge()
  .then((age) => {
    if(age < 10){ config.baseURL = 'https://young.com' }
    else { config.baseURL = 'https://young.com' }
  })

しかし、それは機能しません。 このようにグローバルデフォルトを設定すると、次のようになります。
axios.defaults.baseURL = 'https://example.com';
リクエストで設定を渡すのと同じように:
axios.post('/extra', { baseURL: 'https://example.com' })

どちらの場合も、構成の「url」フィールドは「 https://example.com/extra 」ですが、インターセプターでbaseURLを設定すると、「config.baseURL」のみが更新されます。 理由は理にかなっていますが、文字通りそのフィールドを更新しているだけですが、URLフィールドも更新するか、少なくともドキュメント(できれば大きな太字で)にインターセプターでbaseURLを設定すると記載されていると便利です役に立たない/お勧めしません。

@ Baoyx007いつでも設定の「url」値を手動で変更できます

service.interceptors.request.use(config => {
  //config.baseURL = 'dd'
    config.url = BASE_URL + config.url
  return config;

またはすべての要求に応じて

axios.get('/hello', { baseURL: BASE_URL })

ノードv7.10.0
Axios v0.16.12

全てのコメント3件

私を見てくださいカスタムインスタンスのデフォルトaxios.allは関数ではありません#948私の正常な動作はすべてが関数ではありません

同じ問題が発生しました。 これは、実装の詳細というよりも概念的な問題である可能性があります。 baseURLを設定することは、「これをすべてのリクエストに追加する」という言い方のように思えます。これは、すべてのリクエストに設定すると意味がないように見えます。 ケースは間違いなく次のような条件付きで作成できますが、

axios.interceptors.request.use((config) => {
  return getAge()
  .then((age) => {
    if(age < 10){ config.baseURL = 'https://young.com' }
    else { config.baseURL = 'https://young.com' }
  })

しかし、それは機能しません。 このようにグローバルデフォルトを設定すると、次のようになります。
axios.defaults.baseURL = 'https://example.com';
リクエストで設定を渡すのと同じように:
axios.post('/extra', { baseURL: 'https://example.com' })

どちらの場合も、構成の「url」フィールドは「 https://example.com/extra 」ですが、インターセプターでbaseURLを設定すると、「config.baseURL」のみが更新されます。 理由は理にかなっていますが、文字通りそのフィールドを更新しているだけですが、URLフィールドも更新するか、少なくともドキュメント(できれば大きな太字で)にインターセプターでbaseURLを設定すると記載されていると便利です役に立たない/お勧めしません。

@ Baoyx007いつでも設定の「url」値を手動で変更できます

service.interceptors.request.use(config => {
  //config.baseURL = 'dd'
    config.url = BASE_URL + config.url
  return config;

またはすべての要求に応じて

axios.get('/hello', { baseURL: BASE_URL })

ノードv7.10.0
Axios v0.16.12

#950で修正

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