在一个前端项目中如何将指定的接口代理到指定的服务器地址?

在一个前端项目中如何将 指定的接口 代理到 指定的服务器地址,其他接口不走代理?

我想实现一个可以局部匹配然后代理的功能:

假设一个地址比较长接口 ${SASS_API}/..../user/order/list?abc=abc&abc=abc&abc=abc

可以根据地址中是否存在 /user/order/list 代理请求


// 目标服务器
const MOCK_TARGET = 'www.MOCK_TARGET.com'

// 定义需要代理的接口路径,不需要写全
const mockList = [
    '/user/order/list', 
    .....
]

问题:

  1. 项目启动后会将 mockList 中存在的接口 代理到 MOCK_TARGET
  2. MOCK_TARGET获取的数据需要加工一下再返回给前端

    //如:MOCK_TARGET` 返回 { a: 1 } 处理后返回 { code: 200, data: { a: 1 } } 

如何简单、方便实现这种功能,用软件、代码实现、chrome功能、或者其他方法实现都可以

阅读 2.5k
1 个回答

用Webpack里的http-proxy-middleware

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = {
  devServer: {
    before: function(app) {
      mockList.forEach((path) => {
        app.use(
          path,
          createProxyMiddleware({
            target: MOCK_TARGET,
            changeOrigin: true,
            onProxyRes: function(proxyRes, req, res) {
              // 在这里修改响应
              var body = [];
              proxyRes.on('data', function(chunk) {
                body.push(chunk);
              });
              proxyRes.on('end', function() {
                body = Buffer.concat(body).toString();
                // 修改响应体
                body = JSON.stringify({ code: 200, data: JSON.parse(body) });
                res.end(body);
              });
            },
          })
        );
      });
    },
  },
};

node里:

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

const app = express();

mockList.forEach((path) => {
  app.use(
    path,
    createProxyMiddleware({
      target: MOCK_TARGET,
      changeOrigin: true,
      onProxyRes: function(proxyRes, req, res) {
        // 响应修改逻辑
      },
    })
  );
});

app.listen(3000);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏