react使用http-proxy-middleware跨域请求

1、http-proxy-middleware使用方法

在src目录下创建setupProxy.js文件

const proxy = require("http-proxy-middleware");

// app可以理解为一个express实例
module.exports = function (app) {
  app.use(
    proxy(['/mock/1241', '/mock/1105'], {
      target: "http://10.118.71.83:3000/", // 目标服务器
      changeOrigin: true // 默认false,是否需要改变原始主机头为目标URL,是否进行代理
    }),
  );
}

http-proxy-middleware会作为target的反向代理服务器,接受http://localhost:3000/mock/1241/xxx请求。

一些常用参数说明:

// proxy 中间件的选择项
var config= {
    target: 'http://www.example.org', // 目标服务器 host
    changeOrigin: true,  // 默认false,是否需要改变原始主机头为目标URL
    ws: true, // 是否代理websockets
    pathRewrite: {
        '^/api/old-path': '/api/new-path', // 重写请求,比如我们源访问的是api/old-path,那么请求会被解析为/api/new-path
        '^/api/remove/path': '/path'  // 同上
    },
    router: { 
    // 如果请求主机 == 'dev.localhost:3000',
    // 重写目标服务器 'http://www.example.org' 为 'http://localhost:8000'
        'dev.localhost:3000' : 'http://localhost:8000'
    }
};


target:用于设置目标服务器host。
changeOrigin:默认false,是否需要改变原始主机头为目标URL。
ws:设置是否代理websockets。
pathRewrite:重写目标url路径。
router:重写指定请求转发目标

具体可以参考:https://www.cnblogs.com/zhaow...

2、react项目中是怎么执行setupProxy.js的?

在讲述原理之前,我们先抛出一个问题:为什么直接在src目录下创建setupProxy.js文件就可以进行跨域请求了?下面带着这个问题来探索一番。

既然在react-scripts start启动项目之后就可以跨域请求,那么肯定是在编译完后生成本地服务过程中配置了setupProxy.js配置的中间件。就相当于express项目中先生成express实例,然后再使用实例的use方法配置中间件:

const app = express();
const bodyParser = require('body-parser');

// 使用body-parser解析请求body参数
app.use(bodyParser.json())

http-proxy-middleware中间件的使用

const express = require('express'); 
const proxy = require('http-proxy-middleware'); 

var app = express(); 
app.use('/api', proxy({target: 'http://10.119.168.87:4000', changeOrigin: true}));

当运行react-scripts start时会执行scripts目录下的start.js脚本
react使用http-proxy-middleware跨域请求_第1张图片

参考:https://www.cnblogs.com/zhaow...

你可能感兴趣的:(跨域,代理,react.js)