如何充当代理服务器并修改传入的请求,然后在 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));
我正在构建一个代理服务,它将除一种 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));