vue项目中axios请求网络接口封装
一、安装axios
npm install axios
二、封装方法
在src目录下新建utls文件夹,并在该文件夹建如下文件:
1、url.js
统一放置接口
// 获取省市
let area = 'GetRegionList';
module.exports = {
area
}
2、http.js
引入axios、mint-ui、并封装get请求、post请求方法
import axios from 'axios';
import {MessageBox, Toast, Indicator} from 'mint-ui';
axios.defaults.timeout = 50000//默认请求超时时间
axios.defaults.baseURL = "/api";
axios.defaults.headers.common["Authorization"] = 'toke信息'
// get
export function getHttp (url, params = {}) {
return new Promise((resolve, reject) => {
axios.get(url, data)
.then(response => {
resolve(response.data)
Indicator.close() // // 关闭动画
})
.catch(err => {
reject(err)
Indicator.close() // // 关闭动画
MessageBox.alert('message', err)
})
})
}
// post
export function postHttp (url, data = {}) {
Indicator.open({
text: '加载中...',
spinnerType: 'fading-circle'
})
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(response => {
if (response.status == 200) {
resolve(response.data)
Indicator.close(); // 关闭动画
} else {
Toast(response.data.msg)
}
}, (err) => {
reject(err)
Indicator.close() // // 关闭动画
})
})
}
三、配置main.js
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import {getHttp, postHttp} from './utils/http'
Vue.prototype.$getHttp = getHttp
Vue.prototype.$postHttp = postHttp
// mint-ui
import Mint from 'mint-ui';
Vue.use(Mint);
import 'mint-ui/lib/style.css';
Vue.config.productionTip = false;
router.beforeEach((to, from, next) => {
/* 路由发生变化修改页面title */
if (to.meta.title) {
document.title = to.meta.title
}
next()
})
new Vue({
router,
store,
render: h => h(App)
}).$mount("#app");
四、配置本地请求代理
在根目录下新建vue.config.js,做如下配置
module.exports = {
publicPath:'./',
configureWebpack:{
resolve: {
alias: {
'assets': '@/assets',
'common': '@/common',
'components': '@/components',
'network': '@/network',
'views': '@/views',
'plugins': '@/plugins',
}
}
},
devServer: {
/* 自动打开浏览器 */
open: true,
/* 设置为0.0.0.0则所有的地址均能访问 */
host: '0.0.0.0',
port: 8066,
https: false,
hotOnly: false,
/* 使用代理 */
proxy: {
'/api': {
/* 目标代理服务器地址 */
target: 'https://www.baidu.com/',
/* 允许跨域 */
changeOrigin: true,
},
},
}
}
五、页面使用
async getArea(){ // 获取省市数据
let res = await this.$postHttp(urls.area);
if(res.Success){
console.log('我是省市数据', res.Result);
}else{
Toast.fail(res.Message);
}
}
六、效果


浙公网安备 33010602011771号