GterForumWeB/src/utils/request.js
2024-10-21 11:16:14 +08:00

151 lines
5.1 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**** 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