国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

axios請求頭設置常見Content-Type和對應參數(shù)的處理

這篇具有很好參考價值的文章主要介紹了axios請求頭設置常見Content-Type和對應參數(shù)的處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一,Content-Type

首先要明確的一點是,我們在項目中調用接口,通常是以對象的數(shù)據(jù)格式傳給自己封裝的http請求函數(shù)的。

1,application/json

現(xiàn)在的前后端分離項目基本上都是使用的這個進行數(shù)據(jù)傳遞。
axios默認Content-type是采用application/json;charset=UTF-8,無需設置直接把對象傳進去即可
當然,也可以在請求攔截器中轉化成json后再發(fā)請求(但是不能用qs.stringify)

 config.data = JSON.stringify(config.data)

2,application/x-www-form-urlencoded

"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"

用于表單的提交。值得注意的是,ajax 中(不是axios哈), contentType都是默認的值:application/x-www-form-urlencoded。
特點是提交的參數(shù)按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 會進行了 URL 轉碼。
而要實現(xiàn)這種參數(shù)的序列化,最簡單的方法是引入qs庫。做如下的配置。

import Qs from "qs"
 // 創(chuàng)建axios實例
    const service = axios.create({
      baseURL: process.env.VUE_APP_baseUrl,
      timeout: 5000,
     ...//其他配置
     //transformRequest用來對請求參數(shù)提前進行處理
      transformRequest: [data => Qs.stringify(data, { indices: true })] //Qs.stringify將參數(shù)序列化成key=value&key=value的形式,indices: true是配置參數(shù)有傳數(shù)組的時候,以下標的形式
    })

比如說,當我們傳遞的參數(shù)是:

{
	title:'標題',
	list:[1,2,3]
}

則會被轉化成:title=標題&list[0]=1&list[1]=2&list[2]=3的形式。

Qs.stringify(data, { indices: true }//這個如果用false的話。傳數(shù)組就是title=標題&list=1&list=2&list=3的形式了,也就是不帶索引。

結合上文,在content-tyoe=application/x-www-form-urlencoded時,我們在頁面中傳的是對象,然后通過Qs.stringify把參數(shù)轉換成key=value的形式了,這才可以發(fā)出正確的http請求。
另外,Qs.stringify配置的場合也可以有多個。如下圖在axios中進行配置。
axios請求頭設置常見Content-Type和對應參數(shù)的處理

3,multipart/form-data

這也是一個常見的 POST 數(shù)據(jù)提交的方式。我們使用表單上傳文件時,就要讓 form 的 enctype 等于這個值。這種方式一般用來上傳文件,各大服務端語言對它也有著良好的支持。這個和application/x-www-form-urlencoded的區(qū)別在于一個適合傳字段鍵值,一個適合傳文件。

二,qs.sringify和JSON.stringify的區(qū)別

假設我要提交的數(shù)據(jù)是:

var a = {name:'hehe',age:10};

qs.stringify序列化結果如下

name=hehe&age=10

而JSON.stringify序列化結果如下:

"{"a":"hehe","age":10}"

三,項目中的實際應用

這個項目呢,大多數(shù)post請求,后端的接口設計的是application/x-www-form-urlencoded類型的content-type。唯獨有一個接口設計的是application/json。但是我最開始content-type的設置是在全局的axios中進行配置的,全都配置成application/x-www-form-urlencoded。于是需要分類下,使用application/x-www-form-urlencoded的時候,需要key-value序列化處理,而另一種application/json的則不需要。

import axios from "axios"
import { Message as showMessage } from "element-ui"
import errorCode from "./errorCode"
// import store from "@/store"
import Qs from "qs"
// axios.defaults.headers["Content-Type"] = "application/json" //底下創(chuàng)建axios實例時配置了,這個不用重復配置,再說,這也是axios的默認配置
export default function request(options) {
  return new Promise((resolve, reject) => {
    // 創(chuàng)建axios實例
    const service = axios.create({
      // 表示請求URL公共部分,它會讀取這里的值,然后拼接上頁面使用的url
      baseURL: process.env.VUE_APP_baseUrl,
      timeout: 5000,
      withCredentials: false, // 跨域請求時是否需要cookie等憑證
      responseType: "json",
      params: {},
      maxContentLength: 2000,
      validateStatus: status => status >= 200 && status < 300, //默認值
      maxRedirects: 5, //最大允許重定向次數(shù)
      headers: {
        //公共請求頭配置,本項目請求頭大多數(shù)接口是這個,所以這里可以配置一下,對于特殊接口單獨配置
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
      }
      // transformRequest: [data => Qs.stringify(data, { indices: true })] //將參數(shù)key=value序列化,因為本項目有的接口需要json/對象傳參數(shù),這里就不能這樣直接全局配置,否則有的接口會報400(因為你把json或者是對象類型的數(shù)據(jù),在這里key=value序列化了)
    })
    // request攔截器
    service.interceptors.request.use(
      config => {
        switch (config.method) {
          case "get":
            if (!config.params) {
              config.params = {}
            }
            break
          case "post":
            if (!config.data) {
              config.data = {}
            }
            if (config.type === "keyValue") {
              config.data = Qs.stringify(config.data) //配套application/x-www-form-urlencoded使用
            } else {
              config.headers["Content-Type"] = "application/json" //配套application/json使用
            }
            break
          default:
        }
        console.log(`【request】url:${config.url},data:${config.data} `)
        return config
      },
      error => {
        console.log(error)
        Promise.reject(error)
      }
    )

    // 響應攔截器
    service.interceptors.response.use(
      res => {
        // 未設置狀態(tài)碼則默認成功狀態(tài)
        const code = parseInt(res.data.code) || 0
        // 獲取錯誤信息
        const msg = res.data.msg || errorCode[code] || errorCode["default"]
        if (code != 0) {
          showMessage({
            message: msg,
            type: "error"
          })
          reject(new Error(msg))
          return
        } else {
          resolve(res.data) //獲取到成功的響應了,就把結果resolve出去
        }
      },
      error => {
        console.log("err" + error)
        let { message } = error
        if (message == "Network Error") {
          message = "網(wǎng)絡異常,請檢查網(wǎng)絡"
        } else if (message.includes("timeout")) {
          message = "系統(tǒng)接口請求超時,請檢查網(wǎng)絡"
        } else if (message.includes("Request failed with status code")) {
          message = "系統(tǒng)接口" + message.substr(message.length - 3) + "異常"
        }
        showMessage({
          message: message,
          type: "error",
          duration: 5 * 1000
        })
        return reject(error)
      }
    )
    service(options)
  })
}

然后請求的封裝:

import request from "./request.js"
import { Loading } from "element-ui"
let http = {
  /** post 請求
   * @param  {接口地址} url
   * @param  {請求參數(shù)} params
   * @param  {請求的參數(shù)處理類型}
   * keyValue:默認的application/x-www-form-urlencoded,使用qs.stringify序列化。
   * json:使用application/json,不用處理參數(shù)
   */
  post: function (url, params, type = "keyValue") {
    let loadingInstance = Loading.service({
      lock: true,
      text: "請稍候",
      spinner: "el-icon-loading",
      background: "rgba(0, 0, 0, 0.7)",
      fullscreen: false,
      customClass: "loadingClass"
    })
    return new Promise((resolve, reject) => {
      request({
        url,
        method: "post",
        data: params,
        type
      })
        .then(response => {
          loadingInstance.close()
          resolve(response)
        })
        .catch(error => {
          loadingInstance.close()
          reject(error)
        })
    })
  }
}
export default http

頁面中使用application/json的接口的調用:

async newDog() {
      const that = this
      let params = {
        ...this.petForm
      }
      try {
        let res = await that.$http.post("/dog/newDog", params, "json")
        console.log("--接口請求成功--", res)
        that.$message({
          message: "接口請求成功",
          type: "success"
        })
      } catch (err) {
        console.log("報錯了:", err)
      }
},

大致的設計思路:
axios請求頭設置常見Content-Type和對應參數(shù)的處理文章來源地址http://www.zghlxwxcb.cn/news/detail-406069.html

到了這里,關于axios請求頭設置常見Content-Type和對應參數(shù)的處理的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 整理spring-web里支持的文件以及對應的Content-Type

    整理spring-web里支持的文件以及對應的Content-Type

    最近在弄文件上傳、下載、在線預覽時經(jīng)常需要設置請求標頭或者響應標頭的Content-Type 屬性。所以研究了一下spring支持哪些Content-Type,通過研究MediaTypeFactory.getMediaType的源碼,可以得知spring是將支持的Content-Type 維護在/org/springframework/http/mime.types文件中。 通過上面查找文件的

    2024年02月09日
    瀏覽(22)
  • HTTP content-type內容類型的常見格式

    HTTP content-type內容類型的常見格式

    本專欄是匯集了一些HTML常常被遺忘的知識,這里算是溫故而知新,往往這些零碎的知識點,在你開發(fā)中能起到炸驚效果。我們每個人都沒有過目不忘,過久不忘的本事,就讓這一點點知識慢慢滲透你的腦海。 本專欄的風格是力求簡潔明了。 Content-Type(內容類型),一般是指

    2024年02月04日
    瀏覽(27)
  • HTTP請求頭響應頭的Content-type和Response Type是什么?

    寫代碼寫著寫著發(fā)現(xiàn)這些HTTP的概念還不清楚,縷一縷。 根據(jù)MDN的解釋 Content-Type 實體頭部用于指示資源的 MIME 類型 MIME 類型,即媒體類型,是一種標準,用來表示文檔、文件或字節(jié)流的性質和格式。 根據(jù)MDN的解釋: response.type的值可以是: basic 標準值,同源響應 cors 接收到一

    2024年02月15日
    瀏覽(21)
  • 請求頭content-type的不同格式后端應該如何接收

    博客原文地址 \\\"Content-Type\\\" 是HTTP請求頭中的一個標頭,用于指示請求或響應中包含的實體的媒體類型。它告訴客戶端如何處理響應中的數(shù)據(jù),并通知服務器客戶端正在發(fā)送的數(shù)據(jù)類型。它可以出現(xiàn)在請求或響應標頭中。 Content-Type 的值通常由一個媒體類型和一個可選的字符集組

    2024年02月11日
    瀏覽(35)
  • Nginx:設置響應header的content-type

    Nginx通常根據(jù)/etc/nginx/mime.types文件中類型設置content-type 有時需要根據(jù)實際需要指定content-type,比如對于下載,如果按照mime.types里面的定義: image/jpeg ? ? ? ? ? ? ? ? ? ? ? ? ? ?jpeg jpg; 那么當下載圖片時,瀏覽器會在窗口內直接顯示圖片,而不是另存為文件 。 通過設置

    2024年02月12日
    瀏覽(29)
  • postman可以通的請求,前端通不了(前端添加Content-type,后端收不到請求)

    postman可以通的請求,前端通不了(前端添加Content-type,后端收不到請求)

    接口完成之后,自己使用postman測試了一下,沒有問題; 可是在和小組前端調試接口的時候,他卻說訪問不了; 信息如下:(我自己寫的一個打印請求信息的攔截器) 發(fā)現(xiàn)報錯信息是: ?Content type \\\'application/x-www-form-urlencoded;charset=UTF-8\\\' not supported 也就是說發(fā)送過來的內容格式

    2024年02月04日
    瀏覽(19)
  • http請求頭Content-Type的值為text/plain報錯415解決方案

    問題描述:http請求報錯415,經(jīng)過了解主要是請求頭Content-Type的值為text/plain,為了方便演示,創(chuàng)建一個測試類 測試類 如果請求的請求頭是text/plain,則會報錯,錯誤碼415 具體報錯 解決方案很簡單,直接用字符串接收參數(shù)就行,示例代碼

    2024年02月15日
    瀏覽(20)
  • PHP用CURL發(fā)送Content-type為application/json的POST請求方法

    HELLO 各位伙伴,最近一直在做項目,沒有及時更新。望請見諒。 今天,給大家講一下php請求第三方接口的時候遇到的問題,大家都知道,在請求第三方接口的時候,會要求我們用post還是get來傳參 一般我們傳參的時候基本上都是form-data。有一些第三方為了安全或者是編碼格式

    2024年02月10日
    瀏覽(26)
  • Http請求中Content-Type和Accept講解以及在Spring MVC中的應用

    在Http請求中,我們每天都在使用Content-type來指定不同格式的請求信息,但是卻很少有人去全面了解content-type中允許的值有多少,這里將講解Content-Type的可用值,以及在spring?MVC中如何使用它們來映射請求信息。 1.? Content-Type MediaType是Internet Media Type,互聯(lián)網(wǎng)媒體類型;也叫做

    2023年04月21日
    瀏覽(27)
  • 微信小程序使用阿里云oss設置上傳文件的content-type

    圖片文件上傳到阿里云oss的默認訪問content-type是jpge,這個格式在瀏覽器不能直接打開,需要手動設置上傳的content-type 參考鏈接 UploadTask wx.uploadFile(Object object) OSS調用PostObject用于通過HTML表單上傳的方式將文件(Object)上傳到指定存儲空間(Bucket)。 阿里OSS 上傳圖片 springboo

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包