axios请求头设置常见Content-Type和对应参数的处理方式
import axios from "axios"
import { Message as showMessage } from "element-ui"
import errorCode from "http://www.jb51.net/javascript/errorCode"
// import store from "@/store"
import Qs from "qs"
// axios.defaults.headers["Content-Type"] = "application/json" //底下创建axios实例时配置了,这个不用重复配置,再说,这也是axios的默认配置
export default function request(options) {
return new Promise((resolve, reject) => {
// 创建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, //最大允许重定向次数
headers: {
//公共请求头配置,本项目请求头大多数接口是这个,所以这里可以配置一下,对于特殊接口单独配置
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
// transformRequest: [data => Qs.stringify(data, { indices: true })] //将参数key=value序列化,因为本项目有的接口需要json/对象传参数,这里就不能这样直接全局配置,否则有的接口会报400(因为你把json或者是对象类型的数据,在这里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 => {
// 未设置状态码则默认成功状态
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 = "网络异常,请检查网络"
} else if (message.includes("timeout")) {
message = "系统接口请求超时,请检查网络"
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常"
}
showMessage({
message: message,
type: "error",
duration: 5 * 1000
})
return reject(error)
}
)
service(options)
})
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播