axios getリクエストContent-Typeの設定方法

1605 ワード

最近、仕事中に問題が発生しました.バックエンドで提供されるgetリクエストのインタフェースはrequest headerでContent-Typeを「アプリケーション/json」に設定する必要があります.そこで、次のように設定します.
const http = axios.create({
  method,
  baseUrl,
  url,
  headers: {
    'Content-Type': 'application/json',
  },
  ...
})

しかし、実際の使用ではリクエストヘッダにContent-Typeを設定ことに成功していないことが判明し、ネット上の資料検索ではaxiosのソースコードに問題があるため、具体的な位置はaxios/lib/adapters/xhrである.js:
// Add headers to the request
    if ('setRequestHeader' in request) {
      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
          // Remove Content-Type if data is undefined
          delete requestHeaders[key];
        } else {
          // Otherwise add header to the request
          request.setRequestHeader(key, val);
        }
      });
    }

ここからrequestDataが設定されていない場合にContent-Typeの設定を削除することが分かるが、これはGetリクエスト自体がContent-Typeを必要としないためである.具体的な解決方法は以下の通りです.
const http = axios.create({
  method,
  baseUrl,
  url,
  headers: {
    'Content-Type': 'application/json',
  },
  ...
})

http.interceptors.request.use(config => {
  if (config.method === 'get') {
    //   data     if  
    config.data = true 
  }

  config.headers['Content-Type'] = 'application/json'
  return config
}, err => Promise.reject(err))

インタフェースを再呼び出し、ok大成功
参考資料:https://github.com/axios/axios/issues/362 https://blog.csdn.net/qq_24729895/article/details/80367460