如何充当代理服务器并修改传入的请求,然后在 NodeJS 中转发它们?

How to act as a proxy server and modify incoming requests and then forwared them in NodeJS?

我正在构建一个代理服务,它将除一种 POST 请求之外的所有请求转发到另一台服务器。
我正计划使用 express-http-proxy 来执行此操作,但我找不到即时修改 POST 请求的方法。
例如:

我想捕获对 /getdata 的所有 POST 请求,并检查它们是否有一个名为 username
的字段 如果他们这样做,我想用自定义用户名替换它,然后将请求转发到另一台服务器,然后将响应从它转发回用户。

感谢任何帮助。任何包或资源都会有所帮助。谢谢

我最近遇到了类似的问题,最后使用了 http-proxy-middleware with the following config (based on this 配方):

const express = require('express');
const {createProxyMiddleware} = require('http-proxy-middleware');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());

const options = {
    target: '<your-target>',
    changeOrigin: true,
    onProxyReq: (proxyReq, req, res) => {
        if (req.path === '/getdata' && req.body && req.body.userName) {
            req.body.userName = "someOtherUser";
            const bodyData = JSON.stringify(req.body);
            proxyReq.setHeader('Content-Type', 'application/json');
            proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
            proxyReq.write(bodyData);
        }
    },
};


app.use(createProxyMiddleware(options));
app.listen(4001, () => console.log("listening ..."));

我的诀窍是使用此行重新计算 Content-Length

proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));