IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue项目跨域处理 -> 正文阅读

[JavaScript知识库]vue项目跨域处理

项目介绍:

前端项目是由vue脚手架4版本搭建的,支持vue2.0?gitee项目地址

后端是nodejs项目,做了路由处理,可操作数据库。项目地址gitee项目地址

?遇到问题:

前后端项目运行起来后,前端调用接口,后端api地址是localhost:3000,前端地址是localhost:8080,很显然跨域了。

处理思路:前端带代理,后端nginx代理

【我是个前端开发,最近也是在摸索学nodejs,后端这里如果有写的不对的地方,大家评论区指出,栓Q】

方法一:axios.defaults.withCredentials = false //表示跨域请求时是否需要使用凭证

推荐文章

这个是请求接口封装时候通常会设置的,要注意这个属性的意思是表示跨域请求时是否需要使用凭证。这个使用前提是什么,你不会给后端服务传递Cookie和HTTP认证信息,这说明如果项目设计登录校验之类的,就没什么用了。

?方法二:这个是前端开发最常用的vue.config.js中做代理,这是前端最常见的处理方法,还有一个jsonp之前做H5项目也用过,也可以解决跨域问题,等有时间给补充进来。

//配置文件vue.config.js
proxy: {
      '/api':{
        target:"http://127.0.0.1:3000",
        changeOrigin:true,
        secure:false,
        pathRewrite:{
          "^/api":""
        }
      }
    },
//使用时候可以在接口封装文件中index.js
axios.defaults.baseURL='/api'
const get=function(url, params = {}) {
    console.log(url);
    return new Promise((resolve, reject) => {
      axios.get(url, {
          params: params
        })
        .then(response => {
          resolve(response.data);
        })
        .catch(err => {
          reject(err)
        })
    })
  }
//引用
getList(){
        this.$http.get('/user/list').then((result) => {
            console.log('====================================');
            console.log(result);
            console.log('====================================');
        }).catch((err) => {
            console.log(err);
        });
      }

方法三:nginx反向代理,对nginx不理解的可以nginx知识点看一下这个,通俗的描述nginx在做什么,我找仓库获取资料,但是有大门锁着,并且我也不知道我要的资料放在仓库的那个位置,所以我要找一个中转员,代替我去找。所以在项目中实现就是,项目中地址会指向nginx server中的一个地址,server中的proxy_pass会指向后端服务地址。

//接口封装文件
axios.defaults.baseURL = 'http://localhost:8084/api' // 默认baseUR
axios.defaults.withCredentials = true

修改到这里运行项目,浏览器会提示跨域啦。

接下来重点就是nginx.conf文件配置

# 自测试代理地址
    server {
        listen  8084;
        server_name  localhost;
        index  index.html;
        charset utf-8;
        add_header Access-Control-Allow-Origin http://localhost:8080;
        add_header Access-Control-Allow-Credentials true;
        location /api {
            if ( $request_method = 'OPTIONS' ) { 
                        return 200;
                    }
            rewrite  ^/api/(.*)$ /$1 break;
			proxy_pass   http://127.0.0.1:3000/;
        }
    }

add_header Access-Control-Allow-Origin 允许跨域请求的地址写,前端地址譬如我这里是localhost:8080启动项目,就写这个没问题。

add_header Access-Control-Allow-Credentials,跟前端项目中设置对应起来,如果前端定义了axios.defaults.withCredentials = true,nginx配置文件里面一定要加add_header Access-Control-Allow-Credentials true;如果前端axios.defaults.withCredentials = false,nginx配置文件加不加就无所谓了。

?nginx配置文件编写完,记得重新运行一下。跨域问题解决了

观察一下请求,我们能看到nginx代理服务器给返回的几项设置,绿色地址对应起来Origin是浏览器识别的当前项目地址,Access-Control-Allow-Origin是在nginx配置文件中设置的。这里我试过通配符 * 不管用。这个对应的问题,上面推荐的几个文章中好像有提到哦,点进去阅读一下哦。

本次测试主要就是想了解一下前后端请求的配合问题吧,作为一个前端之前也遇到后端让你做跨域代理什么的。项目大家可以拉下来看看哦,不清楚的请留言!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:13:49  更:2022-07-17 16:15:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 12:37:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码