Vue + Nodejs + Express 解决跨域的问题

首先检测你的Vue的版本号
此文章针对3.0版本解决跨域问题

$ vue -V
2.X or 3.X

直接访问如下

 created() {this.$axios.get('http://localhost:3000/users').then(res => {this.list = res.data.data;console.log(this.list)}).catch(err => {console.log(err)})}

但是会出现如下的报错

因为我们跨域,浏览器拦截了我们的请求,下面是解决跨域的办法

1.配置BaseUrl

首先在main.js中,配置下我们访问的Url前缀:

import App from './App.vue'
import router from './router'
import store from './store'
import Vant from 'vant';
import 'vant/lib/index.css';
import axios from 'axios'Vue.use(Vant);
Vue.config.productionTip = false;
Vue.prototype.$axios = axios;
//
axios.defaults.baseURL = '/users';
axios.defaults.headers.post['Content-Type'] = 'application/json';
//
new Vue({router,store,render: h => h(App)
}).$mount('#app');

关键代码是:Axios.defaults.baseURL = ‘/api’,这样每次发送请求都会带一个/api的前缀.

2.配置代理

在 package.json 文件的同级目录下创建 vue.config.js 文件。给出该文件的基础配置:

module.exports = {outputDir: 'dist',   //build输出目录assetsDir: 'assets', //静态资源目录(js, css, img)lintOnSave: false, //是否开启eslintdevServer: {open: true, //是否自动弹出浏览器页面host: "localhost", port: '8081', https: false,   //是否使用https协议hotOnly: false, //是否开启热更新proxy: null,}
}


修改 vue.config.js 中 devServer 子节点内容,添加一个 proxy:

devServer: {open: true, //是否自动弹出浏览器页面host: "localhost",port: '8080',https: false,hotOnly: false,proxy: {'/users': {target: 'http://localhost:3000/users', //API服务器的地址changeOrigin: true,pathRewrite: {'^/users': ''}}},

3.修改请求Url

修改刚刚的axios请求,把url修改如下:

 created() {this.$axios.get('/show').then(res => {this.list = res.data.data;console.log(this.list)}).catch(err => {console.log(err)})}

4.重启服务

重启服务后就可以正常的访问了

5.番外

当然,跨域问题也可以由后端解决,将下面这个过滤器加入程序即可。

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 跨域过滤器* @author jitwxs* @since 2018/10/16 20:53*/
public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;HttpServletRequest request = (HttpServletRequest) req;// 不使用*,自动适配跨域域名,避免携带Cookie时失效String origin = request.getHeader("Origin");if(StringUtils.isNotBlank(origin)) {response.setHeader("Access-Control-Allow-Origin", origin);}// 自适应所有自定义头String headers = request.getHeader("Access-Control-Request-Headers");if(StringUtils.isNotBlank(headers)) {response.setHeader("Access-Control-Allow-Headers", headers);response.setHeader("Access-Control-Expose-Headers", headers);}// 允许跨域的请求方法类型response.setHeader("Access-Control-Allow-Methods", "*");// 预检命令(OPTIONS)缓存时间,单位:秒response.setHeader("Access-Control-Max-Age", "3600");// 明确许可客户端发送Cookie,不允许删除字段即可response.setHeader("Access-Control-Allow-Credentials", "true");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) {}@Overridepublic void destroy() {}/*注册过滤器:@Beanpublic FilterRegistrationBean registerFilter() {FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>();bean.addUrlPatterns("/*");bean.setFilter(new CorsFilter());// 过滤顺序,从小到大依次过滤bean.setOrder(Ordered.HIGHEST_PRECEDENCE);return bean;}*/
}

Vue + Nodejs + Express 解决跨域的问题相关推荐

  1. vue反向代理解决跨域及部署nginx端口转发解决跨域

    1. 前言 本文是为了解决vue反向代理解决跨域及部署服务器nginx端口转发解决跨域,因为踩了不少的坑,百度了很多,也试了太多的方法,最终得以解决,所以记录一下,希望遇到同样问题的友友们可以高效的解 ...

  2. VUE部署nginx解决跨域问题

    VUE部署nginx解决跨域问题 Vue的代理跨域问题,需要确定的是在开发阶段可以使用,部署到服务器后出现请求失败的问题(404),如下图. VUE配置的代理 Vue的代理跨域问题,需要确定的是在开发 ...

  3. No ‘Access-Control-Allow-Origin‘ header is present on the requested resource Vue配置代理解决跨域问题

    前言 在进行web开发进行数据请求的时候常常会遇到跨域问题导致无法请求数据. 如果采用如下方法向http://localhost:4000服务器发送getStudents进行接口数据请求,在后端没有处 ...

  4. Express解决跨域问题

    跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进 ...

  5. axios请求mysql_接收post请求(vue+axios)解决跨域问题(三)

    1.通过postman测试post请求 新建一个接收post的路由 //根据post的id查询 var selId='select * from list where id=?' //响应post r ...

  6. 在Vue2中怎么解决跨域

    Vue中怎么解决跨域问题 协议域名端口相同为同域 否则都为跨域 这就是需要用跨域来请求数据的报错 第一步:在vue项目中的跟目录下创建一个 vue.config.js ,文件名是固定的,不一样就会报错 ...

  7. 前后端分离项目,如何解决跨域问题?

    跨域问题是前后端分离项目中非常常见的一个问题,举例来说,编程猫(codingmore)学习网站的前端服务跑在 8080 端口下,后端服务跑在 9002 端口下,那么前端在请求后端接口的时候就会出现跨域 ...

  8. Axios解决跨域问题

    什么是跨域 首先需要了解到浏览器的同源策略,同源策略是最核心也是最基本的安全功能,缺少同源策略浏览器的正常功能可能会受到影响.同源策略会阻止一个域的javascript脚本和另外一个域的能容进行交互. ...

  9. express框架在nodejs中的使用+解决跨域问题(cors三方库)

    第一部分commonJS使用第三方框架 一.托管静态资源(让用户直接访问静态资源) 例如,如上url分别是请求一张图片,一份样式文件,一份js代码.我们实现的web服务器需要能够直接返回这些文件的内容 ...

最新文章

  1. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
  2. 16.matlab中各种文件的I/O操作1——load/save
  3. 阿里云将增设马来西亚数据中心 中国技术获赞
  4. java mvc 获取session_Spring MVC----获取session/request
  5. 实现ModelDriver接口的功能(转)
  6. sqlserver oracle 数据类型对应关系,SQLSERVER和ORACLE数据类型对应关系详解和对应表格整理...
  7. consul命令行查看服务_第三章 consul服务注册与服务查询
  8. Java网络编程案例--CS模型的简单实现
  9. oracle 添加默认值列,Oracle 11g增加列,并带默认值的新特性
  10. 从本地push到github以及从github拉一个项目,以及克隆
  11. 向Redis中存入JSON格式数据
  12. oracle分区区别,oracle范围分区表和INTERVAL分区表对于SPLIT分区的区别
  13. python字符编码转换说明及深浅copy介绍
  14. Delphi 集合和字符串互转
  15. mac下安装wxPython2.8.12.1方法
  16. 希腊自助游 - 米岛圣岛,迷失在蓝白之间
  17. C语言如何求球的体积和表面
  18. Map嵌套Map遍历
  19. 微信小程序for循环
  20. python包发布到Pypi官网

热门文章

  1. hibernate防止sql语句注入
  2. java常见的时间处理工具类
  3. Elasticsearch 字段数据类型
  4. Scala中那些令人头痛的符号
  5. Spark中RDD转换成DataFrame的两种方式(分别用Java和scala实现)
  6. ie11上vue中使用elementui的input框无法输入中文
  7. 【TCP/IP详解 卷一:协议】第十八章 TCP连接 的建立与终止 (2)其余内容
  8. 只显示隐藏文件 显示指定目录下的目录
  9. 操作系统概念学习笔记 16 内存管理(二) 段页
  10. Java 基于 TCP/IP 实现 Socket中的多客户端通信