1、

vue.config.js中配置如下

module.exports = {
  // 选项...
// devtool: 'eval-source-map',//开发调试
  devServer: {
  port: 8089,
proxy:{
'/apis': {//代理api
target: "http://999.138.2.133:8080",//服务器api地址
changeOrigin: true,//是否跨域
pathRewrite: {//重写路径
"^/apis": ''
}
}
}
},
configureWebpack: {//引入jquery
plugins: [
new webpack.ProvidePlugin({
$:"jquery",
jQuery:"jquery",
"windows.jQuery":"jquery"
})
]
}, }

在页面中请求的方法

this.axios.get('/apis/ithil_j/activity/movie_annual2017').then(res => {
console.log(res.data)
}, res => {
console.info('调用失败');
})

一个较全面的axios封装

import axios from 'axios';
import Qs from 'qs';//用于表单提交数据格式
//以下是新加
import { MessageBox, Message } from 'element-ui';
import store from '@/store';
import { getToken } from '@/utils/auth';
// import { SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION } from 'constants'; let env = process.env.NODE_ENV;
let root = '';
let loading; if (env === 'development') {
console.log("api");
} else if (env === 'production') {
console.log("pro");
root = '';
} else {
throw '请检查process.env.NODE_ENV的值,是否符合这些值之一:development,production';
} Date.prototype.format = function (fmt) {
var o = {
"y+": this.getFullYear(),
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds() //秒
};
if (!fmt) {
fmt = 'yyyy-MM-dd HH:mm:ss';
}
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
} // 自定义判断元素类型JS
function toType(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
} // 参数过滤函数
function filterNull(o) {
for (var key in o) {
if (o[key] === null) {
delete o[key];
}
if (toType(o[key]) === 'string') {
o[key] = o[key].trim();
} else if (toType(o[key]) === 'date') {
o[key] = (o[key].format());
} else if (toType(o[key]) === 'object') {
o[key] = filterNull(o[key]);
} else if (toType(o[key]) === 'array') {
o[key] = filterNull(o[key]);
}
}
return o;
} function apiAxios(method, url, params, success, failure, authFail) {
console.log('url:' + url);
if (params) {
params = filterNull(params);
} var base = "";
if (url.indexOf(".html") != -1) {
base = "";
} else {
base = root;
} //请求拦截(必须放在配置axios前面)
axios.interceptors.request.use(config=>{
console.log("请求拦截");
config.headers['X-Token'] = 'token';//假数据
return config;
},error=>{
// 请求错误回调
console.log(error) // for debug
});
//响应拦截(必须放在配置axios前面)
axios.interceptors.response.use(response=>{
console.log("响应拦截")
return response;
},error=>{
console.log(error);
}) //配置axios
axios({
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
transformRequest: [function(data) {//在请求之前对data传参进行格式转换
loading= layer.load(2, {//请求未成功时出现loading页 ,3代表一中效果
shade: [0.1,'#fff'] //0.1透明度的白色背景
});
data = Qs.stringify(data);
return data;
}],
method: method,
url: url,
data: method === 'POST' || method === 'PUT' || method === 'DELETE' ? params : null,
params: method === 'GET' ? params : null,
baseURL: base,
withCredentials: true,//跨域请求时发送cookie
timeout: 5000, //过期时间
}).then(function (res) {
if (res.status >= 200 && res.status <= 210 ) {
if (success) {
success(res);
layer.close(loading);//关闭loading效果
}
} else {
//不走
// window.alert('error: ' + JSON.stringify(res.data));
}
}).catch(function (err) {
console.log(err)
if(failure){
failure();
}
// let res = err.response;
// if (err && res) {
// console.log(res.status);
// if (res.status == 504) {
// // alert.eduToast("服务器连接失败!请检查您的网络或服务器!!",2000);
// return;
// } else if (res.status == 401) {
// console.log('------------------:status'+res.status);
// console.log('------------------:authFail'+authFail);
// }
// if (failure) {
// failure(res);
// } else {
// // alert.eduToast(res.data,2000);
// }
// } else {
// if(authFail){
// // localStorage.setItem('login', '');
// }else{
// console.log(err);
// }
// }
}); } // 返回在vue模板中的调用接口
export default {
get: function (url, params, success, failure,authFail) {
return apiAxios('GET', url, params, success, failure,authFail);
},
post: function (url, params, success, failure) {
return apiAxios('POST', url, params, success, failure);
},
put: function (url, params, success, failure) {
return apiAxios('PUT', url, params, success, failure);
},
delete: function (url, params, success, failure) {
return apiAxios('DELETE', url, params, success, failure);
},
initHeader: function () {
console.log('------------------:initHeader');
}
};

vue-cli3中axios如何跨域请求以及axios封装的更多相关文章

  1. VUE系列三:实现跨域请求(fetch/axios/proxytable)

    1. 在 config/index.js 配置文件中配置proxyTable 'use strict' // Template version: 1.3.1 // see http://vuejs-t ...

  2. Vuex、axios、跨域请求处理和import/export的注意问题

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同: 1. ...

  3. Vue 项目中遇到的跨域问题及解决方法

    原文:https://www.jb51.net/article/137278.htm 问题描述 前端 vue 框架,跨域问题后台加这段代码 header("Access-Control-Al ...

  4. Laravel中的ajax跨域请求

    最近接触Laravel框架ajax跨域请求的过程中遇到一些问题,在这里做下总结. 一开始发起ajax请求一直报500错误,搜索相关资料后发现Laravel要允许跨域请求可以加入Cors中间件,代码如下 ...

  5. vue 使用axios 出现跨域请求的两种解决方法

    最近在使用vue axios发送请求,结果出现跨域问题,网上查了好多,发现有好几种结局方案. 1:服务器端设置跨域 header(“Access-Control-Allow-Origin:*”); h ...

  6. vue2.0设置proxyTable使用axios进行跨域请求

    这里请求的是知乎日报的api,由@izzyleung这位大神提供的,这是github地址. 在vue-cli构建的项目中先安装axios npm install axios -S 这里暂不考虑用vue ...

  7. Django 跨域请求 解决 axios 未完待续

    import django import os # os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled5. ...

  8. django中配置允许跨域请求

    对于django 安装django-cors-headers,详情请看官方文档 pip install django-cors-headers 配置settings.py文件 a.在INSTALLED ...

  9. vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址

    一.开发环境中跨域 使用 Vue-cli 创建的项目,开发地址是 localhost:8080,需要访问非本机上的接口http://10.1.0.34:8000/queryRole.不同域名之间的访问 ...

随机推荐

  1. Django:登录、注册、退出

    创建项目: 一.创建项目 django-admin startproject form_test 二.创建应用 1.cd form_test 2.sudo ./manage.py startapp f ...

  2. Jenkins常用插件介绍

    摘要: 对于中小型运维团队,jenkins作为运维利器,可以解决很多工作中的痛点.基于UI的特性从而让使用者的入门成本很低,基于插件可以具备认证,记录,条件触发以及联动,让运维工程师可以将精力放在业务 ...

  3. SpringBoot 初入门

    SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, ...

  4. ASP.NET Core如何限制请求频率

    原文:ASP.NET Core如何限制请求频率 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.ne ...

  5. Pycharm 加载pygame解决方案

    按照<python编程从入门到实践>上的教程下载了pygame的whl文件进行安装, 在cmd窗口里import pygame提示无错误,在IDEL里程序也能正常运行, 但是pycharm ...

  6. Mongoose 使用Node操作MongoDB

    Mongoose好处 可以为文档创建一个模式结构(Schema) 可以对模型中的对象/文档进行验证 数据可以通过类型转换转换为对象模型 可以使用中间件来应用业务逻辑挂钩 比Node原生的MongoDB ...

  7. webpack的postcss的基本应用

    PostCss是什么? PostCSS在webpack中的基本应用 一.PostCss是什么? 如果有深入学习PostCss需求的话可以参考大漠的资料:https://www.w3cplus.com/ ...

  8. Linux终端命令行的快捷键

    涉及在Linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. • 常用 1.ctrl+左右键:在单词之间跳转 2.ctrl+a:跳到 ...

  9. Maximum Xor Secondary CodeForces - 281D (单调栈)

    Bike loves looking for the second maximum element in the sequence. The second maximum element in the ...

  10. java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期

    Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...