Vue跨域详解
碰到这种问题,其实你的接口已经通了,但是在页面上就是访问不通过。
你可以把API请求地址单独拎出来新开个网站打开看请求是否成功,成功,但是你的项目不通。
有那么几个可能吧:
1、请求头设置错误
headers = {
'Content-Type': 'application/json' //错误的
'Content-Type':'application/x-www-form-urlencoded' // 正确的
}
2、本地运行要配置反向代理
最基础的配置

3、环境配置
当然你还需要配置你的环境配置文件(.env.dev .env.production 等)
NODE_ENV='production' / 'development' // 二选一,一个开发环境一个生产环境,部署服务器要用开发环境的
VUE_APP_RUN_ENV='dev'/'pro'/'test' // 三选一可以自定义名字,按你定义的环境来定,自己分得清就行。只是一个标识
VUE_APP_BASE_URL = '' //这里是你请求后端的域名地址
假如你配置了多种环境那么你还需要配置下package.json文件

--mode 后面是你配置的环境文件的 NODE_ENV 名字

4、假如你用的是axios来作请求插件,那么还需要配置下axios
/**** request.js ****/
// 导入axios
import axios from 'axios'
// 导入本地缓存
import {
setStore,
getStore
} from '../../util/lostore.js'
// 使用element-ui Message做消息提醒
import {
Message
} from 'element-ui';
//1. 创建新的axios实例,
const service = axios.create({
// 公共接口--这里注意后面会讲
baseURL: process.env.VUE_APP_BASE_URL,
// 超时时间 单位是ms,这里设置了5s的超时时间
timeout: 5 * 1000
})
// 2.请求拦截器
service.interceptors.request.use(config => {
//发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
config.data.__userToken = getStore('userToken')
config.data = config.data; //数据转化,也可以使用qs转换
config.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
return config
}, error => {
Promise.reject(error)
}) // 3.响应拦截器
service.interceptors.response.use(response => {
//接收到响应数据并成功后的一些共有的处理,关闭loading等
return response.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 = '请求错误,未找到该资源'
// // window.location.href = "/NotFound"
// 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')) {
Message.error('服务器响应超时,请刷新当前页')
}
error.message = '连接服务器失败'
} Message.error(error.message)
/***** 处理结束 *****/
//如果不需要错误处理,以上的处理过程都可省略
return Promise.resolve(error.response)
})
//4.导入文件
export default service
封装统一的GET POST等常见的请求Function
/**** http.js ****/
// 导入封装好的axios实例
import request from './request' const http = {
/**
* methods: 请求
* @param url 请求地址
* @param params 请求参数
*/
get(url, params) {
const config = {
method: 'get',
url: url
}
if (params) config.params = params
return request(config)
},
post(url, params) {
const config = {
method: 'post',
url: url
}
if (params) config.data = params
return request(config)
},
put(url, params) {
const config = {
method: 'put',
url: url
}
if (params) config.params = params
return request(config)
},
delete(url, params) {
const config = {
method: 'delete',
url: url
}
if (params) config.params = params
return request(config)
}
}
//导出
export default http
再封装个api接口方法,妈呀停不下来了
// api.js
import request from "../common/axios/request.js"; // 例子
export function xxx(params) {
return request({
url: "/login",
method: "post",
data: params
});
}
export function xxx(params) {
return request({
url: "/login",
method: "get",
params: params
});
}
ok,当你页面调用的时候就可以这样用:
首先引用你的接口api方法
import {
xxx
} from '../api/api.js'
然后在created或者mouted里就可以直接调用xxx方法啦
xxx(params).then(res => {
console.log(res)
})
至此你可以试着去运行项目了
Vue跨域详解的更多相关文章
- 跨域详解之jsonp,底层的实现原理
分享一下跨域,不仅是因为现在的工作中遇到的越来越多,而且在面试中也经常被问到. 那么什么是跨域呢,我们来看官方给出的解释:浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的(所谓同源是指,域名 ...
- 【nginx】nginx解决跨域详解
使用场景:本地运行一个项目,但是要访问外域的api接口,存在跨域问题,解决方式有很多,但我尝试用nginx解决,搜索了网上文章后再加上尝试终于成功, 其中一些注意事项和大家分享一下. 一.window ...
- js&jquery跨域详解jsonp,jquery并发大量请求丢失回调bug
URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http:/ ...
- ajax工作原理及jsonp跨域详解
一.Ajax简介 ajax = 异步 JavaScript 和 XML. ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.我们知道,传统的网页(不使用ajax)如果需要更新内容, ...
- js跨域详解
跨域概念:Cross-origin resource sharing
- JavaScript中的跨域详解(二)
4.AJAX 同源政策规定,AJAX请求只能发给同源的网址,否则就报错. 除了架设服务器代理(浏览器请求同源服务器,再由后者请求外部服务),有三种方法规避这个限制. JSONP WebSocket C ...
- JavaScript中的跨域详解(一)
同源策略 所谓的同源策略,指的是浏览器对不同源的脚本或者文本访问方式进行的限制. 所谓同源,就是指两个页面具有相同的协议,主机(也常说域名),端口,三个要素缺一不可. 同源政策的目的,是为了保证用户信 ...
- 跨域详解之-----Jsonp跨域
一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如 ...
- [转]vue跨域解决方法
vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' hea ...
- vue 文件目录结构详解
vue 文件目录结构详解 本篇文章主要介绍了vue 文件目录结构详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 项目简介 基于 vue.js 的前端开发环境,用于前后 ...
随机推荐
- 如何通过C++ 将数据写入 Excel 工作表
直观的界面.出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件.在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最有效手段之一.这样不仅可以方便 ...
- D - Swap Free Gym - 102423D 二分图性质:补图最大团 = 点的个数 - 最大匹配数
题意:给你一个串的某些全排列,没有重的,让你求一个最大的集合能有多少个元素,集合的满足条件:交换一个串的任意两个位置上的字母,不能变成集合里的另一个串. 思路:如果一个串不能通过交换一次字母位置变成另 ...
- # 1. C++概述
1. C++概述 1.1 c++简介 "c++"中的++来自于c语言中的递增运算符++,该运算符将变量加1.c++起初也叫"c with clsss".通过名称 ...
- 2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建
前言 去年公司由于不断发展,内部自研系统越来越多,所以后来搭建了一个日志收集平台,并将日志收集功能以二方包形式引入自研系统,避免每个自研系统都要建立一套自己的日志模块,节约了开发时间,管理起来也更加容 ...
- day10-SpringBoot的异常处理
SpringBoot异常处理 1.基本介绍 默认情况下,SpringBoot提供/error处理所有错误的映射,也就是说当出现错误时,SpringBoot底层会请求转发到/error这个映射路径所关联 ...
- MySQL 主从复制的问题及解决方案
更多内容,前往 IT-BLOG 复制功能是构建 MySQL 的大规模.高性能的基础,也就是所谓的 "水平扩展" 架构.我们可以通过为服务器配置一个或多个备库.同时,复制也是高可用性 ...
- 命令行启动kate||cmd启动kate|| 一行命令用kate编辑文件
命令行启动kate||cmd启动kate|| 一行命令用kate编辑文件 先看: 在得知可以在命令行中输入code以启用vscode编辑器后 例 code D:\dLevel\Lenovo\Deskt ...
- python协程详细解释以及例子
目录 1.协程 1.1greenlet实现协程 1.2yield关键字实现协程 1.3使用asyncio模块实现协程 1.4async & await关键字实现协程 2.协程意义 3.异步编程 ...
- [Python]PyCharm中出现unresolved reference的解决方法
1 问题描述 2 解决方法 将你的目录添加sources root,即可解决此问题 (工程目录)>右键>Mark Directory As > Sources Root X 参考文献 ...
- TypeScript必知三部曲(一)TypeScript编译方案以及IDE对TS的类型检查
TypeScript代码的编译过程一直以来会给很多小伙伴造成困扰,typescript官方提供tsc对ts代码进行编译,babel也表示能够编译ts代码,它们二者的区别是什么?我们应该选择哪种方案?为 ...