痛点:
1. 后端对全部请求的url进行了调整。
2.后端要求给所有的请求头部添加一个token, 或者对请求添加其他全局处理。
3.请求代码直接写在每个页面里, 看起来代码臃肿,不够简练,太难管理。
4.看到请求代码, 不明白该请求是干嘛的,语义化不够明显。 ...
上面列举的是一些常见的问题,如果没对api进行封装,当请求比较多的时候,修改起来欲哭无泪,解决这些问题可以进行以下操作
1.对axios进行二次封装
2.对全部api请求也进行封装
如下是对axios 进行二次封装, 文件名是 network/index.js:
import axios from "axios";
import Cookies from "js-cookie";
// 设置超时时间
const myAxios = axios.create({
timeout: 5000
});
// 跳转登录页面
function nav2Login() {
location.href = '/xxxx/login'
}
// 添加一个请求拦截器
myAxios.interceptors.request.use(
function(config) {
// Do something before request is sent
config.headers["token"] = Cookies.get("token") || "";
return config;
},
function(error) {
// Do something with request error
return Promise.reject(error);
}
);
// 添加一个响应拦截器
myAxios.interceptors.response.use(
function(response) {
// Do something with response data
// 这里只是以200 401为示例, 其他状态码可以根据需要自行添加
if (response.status === 200) {
return response.data;
} else if (response.status === 401) {
nav2Login()
return Promise.reject();
} else {
return {
status: 0,
message: response.data.message
};
}
},
function(error) {
// Do something with response error
return Promise.reject(error);
}
);
export default myAxios;
下面是对全部的api进行了封装,文件名是 network/api.js:
import axios from "./index.js";
const API = {
userList: 'api/user/all', // 用户列表
cityList: 'api/city/all', // 城市列表
};
function Axios(obj) {
return axios({
...obj
}).catch(e => {
// 这里兜住error, 从而不影响后续代码执行,避免出现白屏
return {
status: 0,
message: "网络请求异常"
};
});
}
// 给函数命名的时候 尽量语义化
function getUserList(params) {
return Axios({
url: API.userList,
method: "post",
params
});
}
function getCityList(params) {
return Axios({
url: API.cityList,
method: "get",
params
});
}
export default {
getUserList,
getCityList,
}
可以把这些请求挂载在一个全局的变量上, 以Vue为例:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import api from "@/network/api.js";
Vue.prototype.$api = api;
new Vue({
router,
render: h => h(App)
}).$mount('#app')
Vue项目中使用方法如下:
this.$api.getUserList(obj).then(res => {
// 处理res
}).catch(err){
// 处理 err
}
// 或者使用async await
async getUserList () {
try {
const res = await this.$api.getUserList(obj)
// 处理res
} catch (err) {
// 处理err
}
}
补充知识:Vue项目中对axios进行封装以及api接口请求
对axios进行封装:
/* 定义一个ajax请求函数,并且其返回值: promise对象(异步返回的数据是: response.data) */
import axios from 'axios';
export default function ajax (url, data={}, type='GET') {
return new Promise(function (resolve, reject) {
// 执行异步ajax请求
let promise
if (type === 'GET') {
// 准备url query参数数据,
let dataStr = '' //数据拼接字符串
Object.keys(data).forEach(key => {
dataStr += key + '=' + data[key] + '&'
})
if (dataStr !== '') {
dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
url = url + '?' + dataStr
}
// 发送get请求
promise = axios.get(url)
} else {
// 发送post请求
promise = axios.post(url, data)
}
promise.then(function (response) {
// 成功了调用resolve()
resolve(response.data)
}).catch(function (error) {
//失败了调用reject()
reject(error)
})
})
}
以上这篇结合axios对项目中的api请求进行封装操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
axios,api请求,封装
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]