axio post 請求後端接收不到參數的解決辦法

緣由是沒有對參數進行序列化node

默認狀況下,axios將JavaScript對象序列化爲JSON。 要以應用程序/ x-www-form-urlencoded格式發送數據。ios

在攔截器前修改npm

方法一,用原生js序列化參數axios

// 建立axios實例
const service = axios.create({
  baseURL: process.env.BASE_API, // api 的 base_url
  timeout: 30000, // 請求超時時間
  transformRequest: [function(data) {
    const str = []
    for (const i in data) {
      str.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]))
    }
    return str.join('&')
  }]
})

方法二,用qs序列化參數api

//npm install axios的時候默認會安裝qs
// qs相關的問題請搜索"nodejs qs"或者看這裏https://www.npmjs.com/package/qs
import qs from 'qs';

const service = axios.create({
  baseURL: process.env.BASE_API, // api 的 base_url
  timeout: 30000, // 請求超時時間
  transformRequest: [
    function(data) {
      return qs.stringify(data, {
        arrayFormat: 'brackets'
      })
    }
  ]
})

網上方案說要加app

instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

我沒有加,由於我發現默認axios的post就是x-www-form-urlencoded。post

到此,這個問題解決了url

相關文章
相關標籤/搜索