龙空技术网

前端项目中如何解决AJAX跨域的问题?

飞舟聊编程 181

前言:

当前大家对“ios系统ajax跨域调用”都比较关注,看官们都想要知道一些“ios系统ajax跨域调用”的相关内容。那么小编也在网上网罗了一些有关“ios系统ajax跨域调用””的相关资讯,希望小伙伴们能喜欢,小伙伴们一起来了解一下吧!

解决跨域的方案有很多,比如说 JsonP、document.domain、window.name、postMessage、nginx等,本文主要讲一下开发环境下如何配置反向代理实现跨域,注意以下方法仅限于开发环境,生产环境不适用。

webpack

如果当前项目是通过 webpack 来打包的,则可以利用 devServer 来实现反向代理,具体代码如下:

// webpack.config.jsmodule.exports = {    entry: {},    module: {},    // ...    devServer: {        historyApiFallback: true,        proxy: {            '/mock': { // 匹配以 /mock 开头的请求,都将被转发                target: ';,  // 代理跨域目标服务器接口                changeOrigin: true, // 默认 false,changeOrigin 是否改变请求头                secure: false,  // 当代理某些 https 服务报错时用                // ws: true, // 是否代理 websockets                pathRewrite: {                    '^/mock': '' // 重写请求,比如原访问 /mock/list,那么请求会被解析为                 }            }        }    }}

比如前端请求地址为 /mock/login,会被转发到地址为 的服务器接口。

Vue

无论是 Vue项目还是 React 项目,都是通过 webpack 来构建的,但是通过官方脚手架构建的项目,是对 webpack进行了封装的,看不到相关的配置文件,所以原则上是不能直接去修改 webpack 配置。但是 Vue 可以通过在项目根目录下创建 vue.config.js 文件来覆盖 webpack 的配置,具体配置如下:

module.exports = {    devServer: {        historyApiFallback: true,        proxy: {            '/mock': {                target: ';,                changeOrigin: true,                secure: false,                pathRewrite: {                    '^/mock': ''                }            }        }    }}
React

第一种方式

在 package.json 中添加一个 proxy 字段:

{  "proxy": ";}

不过这种方式在早期 react 项目中有效,在 react-script@2.0.0 或更高版本中,建议使用以下的方式。

第二种方式(推荐)

借助 http-proxy-middleware 模块来实现,项目中安装该模块:

npm i http-proxy-middleware -D

然后在项目的 src 目录下创建 setupProxy.js 文件,内容如下:

const { createProxyMiddleware } = require('http-proxy-middleware');// const proxy = require("http-proxy-middleware"); // 注意这种写法失效module.exports = function (app) {    app.use(createProxyMiddleware(      '/mock',       {        target: ';,        changeOrigin: true,         pathRewrite: {          '^/mock': ''        }      }    ))}

该文件不需要引入,react 启动后会自动引入该文件的,配置完毕后,一定要重启服务器后,再测试。

第三种方式(扩展性更强)

还有一种方式比较粗暴,直接运行 npm run eject 命令将项目的 webpack 配置文件暴露出来,但是这种方式会使得项目结构变得非常的复杂,也不容易修改原始配置,但是可以通过 customize-cra 模块来拓展 webpack的配置,首先安装模块:

npm i -D customize-cra react-app-rewired

第二步、修改 package.json 的 scripts 的配置:

"scripts": {    "start": "react-app-rewired start",    "build": "react-app-rewired build",    "test": "react-app-rewired test --env=jsdom",    "eject": "react-scripts eject"}

第三步、在项目的根目录下创建config-overrides.js,内容如下:

const path = require('path');const { overrideDevServer } = require('customize-cra');module.exports = {  devServer: overrideDevServer((config)=> (    {      ...config,      proxy: {        '/api': {          target: ';,          changeOrigin: true,          pathRewrite: {            '^/api': '',          },        },         '/mock': {          target: ';,          changeOrigin: true,          pathRewrite: {            '^/mock': '',          },        }      }    }  ))}

然后通过 yarn start 运行项目即可。

【本文转载自我的微信公众号-飞舟技术社区】

【喜欢我的文章欢迎 转发 点赞 与 关注,我会经常与大家分享前端的知识点的】

标签: #ios系统ajax跨域调用