151 lines
5.1 KiB
JavaScript
Executable File
151 lines
5.1 KiB
JavaScript
Executable File
/**** request.js ****/
|
||
// 导入axios
|
||
import axios from "axios"
|
||
// 使用element-ui Message做消息提醒
|
||
import { Message } from "element-ui"
|
||
import baseURL from "@/utils/baseApi"
|
||
import { goTologin } from "@/utils/common.js"
|
||
|
||
//1. 创建新的axios实例,
|
||
axios.defaults.withCredentials = true
|
||
axios.defaults.emulateJSON = true
|
||
|
||
// 好几个接口
|
||
baseURL = {
|
||
// forum: "https://forum.gter.net",
|
||
forum: "https://app.gter.net/forum",
|
||
offer: "https://offer.gter.net",
|
||
tenement: "https://app.gter.net",
|
||
}
|
||
|
||
const service = axios.create({
|
||
baseURL: baseURL.forum,
|
||
timeout: 15000,
|
||
})
|
||
|
||
// 2.请求拦截器
|
||
service.interceptors.request.use(
|
||
config => {
|
||
//发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
|
||
//注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie
|
||
// config['headers']['authorization'] = "qj2q1qk1on0curclipghjtv5ja1g9eq2"
|
||
// config['headers']['authorization'] = "661aiz52k5e6vqgmkxnz0wvbv8nciz8h"
|
||
|
||
// if (process.env.NODE_ENV == "development") config['headers']['authorization'] = "0h870ovk2xckoqfsh8a3t3sg4sg5z7eg"
|
||
if (process.env.NODE_ENV == "development") config["headers"]["authorization"] = "5f8215f2105d8b2162d0cc210cdbf1a3"
|
||
|
||
return config
|
||
},
|
||
error => {
|
||
Promise.reject(error)
|
||
}
|
||
)
|
||
|
||
// 3.响应拦截器
|
||
service.interceptors.response.use(
|
||
response => {
|
||
//接收到响应数据并成功后的一些共有的处理,关闭loading等
|
||
let data = response.data
|
||
if (data.code == 401) return goTologin()
|
||
if (data.code == 201 && response["config"]["ispop"] == true) Message.error(data.message)
|
||
return data
|
||
},
|
||
error => {
|
||
/***** 接收到异常响应的处理开始 *****/
|
||
if (error && error.response) {
|
||
// 1.公共错误处理
|
||
// 2.根据响应码具体处理
|
||
switch (error.response.status) {
|
||
case 400:
|
||
error.message = "错误请求"
|
||
break
|
||
case 401:
|
||
error.message = "未授权,请重新登录"
|
||
break
|
||
case 403:
|
||
error.message = "拒绝访问"
|
||
break
|
||
case 404:
|
||
error.message = "请求错误,未找到该资源"
|
||
break
|
||
case 405:
|
||
error.message = "请求方法未允许"
|
||
break
|
||
case 408:
|
||
error.message = "请求超时"
|
||
break
|
||
case 500:
|
||
error.message = "服务器端出错"
|
||
break
|
||
case 501:
|
||
error.message = "网络未实现"
|
||
break
|
||
case 502:
|
||
error.message = "网络错误"
|
||
break
|
||
case 503:
|
||
error.message = "服务不可用"
|
||
break
|
||
case 504:
|
||
error.message = "网络超时"
|
||
break
|
||
case 505:
|
||
error.message = "http版本不支持该请求"
|
||
break
|
||
default:
|
||
error.message = `连接错误${error.response.status}`
|
||
}
|
||
} else {
|
||
// 超时处理
|
||
if (JSON.stringify(error).includes("timeout")) error.message = "服务器响应超时,请刷新当前页"
|
||
error.message = "连接服务器失败"
|
||
}
|
||
|
||
Message.error(error.message)
|
||
/***** 处理结束 *****/
|
||
//如果不需要错误处理,以上的处理过程都可省略
|
||
return Promise.resolve(error.response)
|
||
}
|
||
)
|
||
|
||
const http = {
|
||
/**
|
||
* methods: 请求
|
||
* @param url 请求地址
|
||
* @param params 请求参数
|
||
* @param baseURLName 域名名称 不传为论坛
|
||
* @param ispop 报错是否需要弹窗
|
||
*/
|
||
get(url, params, baseURLName, ispop = true) {
|
||
const str = window.location.hostname
|
||
let hash = 0
|
||
for (let i = 0; i < str.length; i++) {
|
||
const char = str.charCodeAt(i)
|
||
hash = (hash << 5) - hash + char
|
||
hash |= 0
|
||
}
|
||
const strr = (hash >>> 0).toString(16)
|
||
|
||
const config = {
|
||
method: "get",
|
||
url,
|
||
baseURL: baseURL[baseURLName],
|
||
}
|
||
params = Object.assign({}, params, { key: strr })
|
||
if (params) config.params = params
|
||
return service(config)
|
||
},
|
||
post(url, params, baseURLName, ispop = true) {
|
||
const config = {
|
||
method: "post",
|
||
url: url,
|
||
baseURL: baseURL[baseURLName],
|
||
}
|
||
if (params) config.data = params
|
||
config["ispop"] = ispop
|
||
return service(config)
|
||
},
|
||
}
|
||
// 导出
|
||
export default http
|