Axios は配列パラメータを渡しますが、バックグラウンドはそれらを受け取ることができません

フロントエンドとバックエンドの共同デバッグに関しては、パラメータを受信できないという問題があり、カラーペンのバックエンドに遭遇した場合、パラメータの形式が明確ではなく、インターフェイスドキュメントがないため、非常に困難です。頭痛。

Axios パラメータは、get(delete)、post(put) の 2 つのグループに分かれています。getとdeleteのパラメータの受け渡し方法は基本的に同じであり、postとputのメソッドも基本的に同じです。

1. get(delete) 転送配列をバックグラウンドで受信できません。

これらはどちらも疑問符パラメータです。つまり、パラメータは URL の疑問符の後ろで結合されます。
以上です:
ここに画像の説明を挿入
ここに画像の説明を挿入
しかし、配列を渡すときは面倒です:

export function getCrApplicationList(data) {
    
    
  var test = [111,222]
  return request({
    
    
    url:/applicant/CrApplication/List‘,
    method:get,
    params: {
    
     test }
  })
}

ここに画像の説明を挿入
この場合、バックグラウンドは値を取得できないため、配列を次の形式に変更する必要があります。
ここに画像の説明を挿入
まず axios のリクエスト インターセプトを見つけ、qs を使用し、次のコードを追加します。

if (config.method === 'get') {
    
    
    // 如果是get请求,且params是数组类型如arr=[1,2],则转换成url?ids=1&ids=2&ids=3
    config.paramsSerializer = function(params) {
    
    
      // return qs.stringify(params, { arrayFormat: 'repeat' })
      return qs.stringify(params, {
    
     indices: false })
    }
  }

コンソールの効果は次のとおりです。
ここに画像の説明を挿入
投稿では基本的に、配列を受け入れることができないという問題は発生しません。発生した場合は、パラメータを直接フォーマットするだけです。

qs.stringify(params, {
    
     indices: false })

qs ライブラリの配列の形式は次のとおりです。

qs.stringify({
    
    ids: [1, 2, 3]}, {
    
     indices: false })
// 形式: ids=1&ids=2&id=3
qs.stringify({
    
    ids: [1, 2, 3]}, {
    
    arrayFormat: 'indices'})
// 形式: ids[0]=1&aids1]=2&ids[2]=3
qs.stringify({
    
    ids: [1, 2, 3]}, {
    
    arrayFormat: 'brackets'})
// 形式:ids[]=1&ids[]=2&ids[]=3
qs.stringify({
    
    ids: [1, 2, 3]}, {
    
    arrayFormat: 'repeat'}) 
// 形式: ids=1&ids=2&id=3

2. ポスト(プット)パラメータの受け渡し問題

投稿リクエストがバックグラウンドでパラメータを受信できない場合は、次の側面から確認できます

  1. post パラメータはデータ
    ここに画像の説明を挿入
    2 です。バックグラウンド
    ではパラメータを渡すためにフォーム形式が必要ですか? Axios のデフォルトは jsonapplication/json;charset=utf-8 です。バックグラウンドでパラメータを渡すためにフォーム形式が必要な場合は、次のように設定する必要があります。

ヘッダーの Content-Type は application/x-www-form-urlencoded、charset=utf-8 または multipart/form-data です。

ポストパラメータの形式:

  • application/x-www-form-urlencoded (フォームモード)
  • application/json (JSON モード)
  • multipart/form-data (ファイルモード)

補充:

1. 投稿リクエストの URL の疑問符の後にパラメータを渡すことはできますか?

答え: はい。URLの直後に結合

export function listGroup(query){
    
    
  return request({
    
    
    url:"/census/group/list"+'?pageNum='+query.pageNum+'&pageSize='+query.pageSize,
    method:'post',
    data:query
  })
}

2. get リクエストの本文にパラメーターを含めることはできますか?

答え: いいえ。パラメータを渡すために URL に接続することしかできません
参考理由: GET リクエストでのボディフロントエンド Get リクエストの使用について
、ボディ内にパラメータをアップロードできますか?

3. パラメータの削除に関するその他の質問

参考:axiosの転送パラメータ削除メソッド

おすすめ

転載: blog.csdn.net/weixin_43045869/article/details/126784934