当前位置: 首页 > 知识库问答 >
问题:

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

戎志勇
2023-08-09

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

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

假设一个地址比较长接口 ${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功能、或者其他方法实现都可以

共有1个答案

梁和颂
2023-08-09

用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);
 类似资料:
  • 一些 Dreamweaver 功能需要 Internet 连接。如果您或您的组织通过代理服务器来路由 Internet 连接,则必须提供 Dreamweaver 的服务器凭据,以便成功连接到 Internet。 您可以在 Adobe Creative Cloud 中为桌面应用程序指定代理服务器凭据。Creative Cloud 桌面应用程序在首次启动时,会确定是否通过代理服务器来路由 Intern

  • 我是AnyLogic的新手,我正在尝试创建一个自定义网络...但我无法成功完成此任务:( 然后我有一个变量“network”,它包含年龄类之间链接的平均数。 我想要的是每个代理根据矩阵创建与其他代理的链接。 我不知道如何对一个座席说“连接到另一个具有AgeClass=3的座席” 谢谢大家的支持!!!

  • 本教程将介绍如何配置Apache以监听指定地址和端口。 当Apache启动时,它会绑定到本地计算机上的某个端口和地址,并等待传入的请求。默认情况下,它会监听计算机上的所有地址。但是,可能需要告知监听特定端口,或仅监听选定地址,或两者的组合。这通常与虚拟主机功能结合使用,后者确定Apache如何响应不同的IP地址,主机名和端口。 指令告诉服务器仅接受指定端口或地址和端口组合的传入请求。如果在指令中仅

  • 我想在Linux上的Azure应用服务(容器的网络应用)上使用scrapinghub/spash容器。 但是部署上的docker run命令会随机更改容器端的绑定端口(请参阅下面的日志,端口8961会自动分配。此数字每次部署都有所不同) 2020-01-21 08:56:47.494信息-docker run-d-p 8961:8050-名称b2scraper-splash\u 3\u d89ce

  • 问题内容: 我的项目基于create-react-app。或默认情况下,将在 端口3000 上运行该应用程序,并且在package.json中没有指定端口的选项。 在这种情况下,如何指定自己选择的端口?我想同时运行此项目的两个(用于测试),一个在端口,另一个在 问题答案: 如果您不想设置环境变量,则另一个选择是从以下位置修改package.json 的一部分: 至 Linux (在Ubuntu 1

  • 问题内容: 我有两个接口,和。然后,我有一些实现两个接口的UI对象- 例如,一个实现既有单击处理程序又有花哨的反馈的UI对象。 在声明s的代码中,我实际上不想说什么,因为也许以后我希望它成为一个具有单击处理程序并提供精美反馈的对象。因此,与其说具体一点,不如说: 我想说, 我希望编译器要求同时实现 和 。 我可以 创建一个扩展这两个接口的接口 ,并使用它。有没有更简单/更省力的方法? 问题答案: