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 的前端开发环境,用于前后 ...
随机推荐
- 在 Sitecore 里使用 Solr 搜索 SortOrder 关联的 Item
在 C# 使用 Solr 搜索 sitecore 的配置信息文件可直接丢进 <Instance>\App_Config 下,sitecore 会自动检测配置文件更新并加载到内存中. 通常情 ...
- git clone的时候出现 fatal: unable to access 'https://github.com/...':OpenSSL SSL_read: Connection was reset, errno 10054解决方法
git clone的时候出现fatal: unable to access 'https://github.com/...':OpenSSL SSL_read: Connection was rese ...
- Spring 注解整理
更多内容,前往IT-BLOG 一.核心容器 [1]@Configuration:告诉 Spring 这是一个配置类(配置类=配置文件)[2]@Bean:给容器中注册一个 Bean :类型为返回值类型, ...
- 在线调试工具 Arthas
Arthas(阿尔萨斯) 是 Alibaba开源的一款 Java在线诊断工具,能够分析,诊断,定位Java应用问题,例如:JVM信息,线程信息,搜索类中的方法,跟踪代码执行,观测方法的入参和返回参数等 ...
- vulnhub靶场之WIRELESS: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Wireless: 1,下载地址:https://download.vulnhub.com/wireless/Mystiko-Wireless. ...
- Delete ␍eslint(prettierprettier)错误
Delete ␍eslint(prettier/prettier)错误 今天在用HBuilder开发uniapp项目时,想换成vscode进行开发,但是用vscode打开之前的项目,eslint报错一 ...
- 二进制安装Kubernetes(k8s) v1.24.3 IPv4/IPv6双栈
二进制安装Kubernetes(k8s) v1.24.3 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支 ...
- kubernetes核心实战(二)---Pod+ReplicaSet
3.pod Pod 是可以在 Kubernetes 中创建和管理的.最小的可部署的计算单元. Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器:这些容器共享存储.网络.以及怎样运行这些容 ...
- tar:Error is not recoverable:exiting now
问题描述:文件包在不同网络跟介质之间传输,导致文件破损,如何使用md5的方式去对比文件的完整性 tar:Child returned status 1 tar:Error is not recover ...
- vue条件判断循环
条件判断 v-if <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...