Node代理,http-proxy-middleware,POST请求失败

当使用http-proxy-middleware时,POST请求由于bodyParser导致失败。解决方案包括在代理中添加代码将解析后的body数据回传,或者改用express-http-proxy插件,并提供了一个proxy.js的代码示例链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Node代理,http-proxy-middleware,POST请求失败

http-proxy-middleware,POST请求失败

因为 bodyParser 导致的代理转发带有 body 数据的 post 请求会失败

var express = require('express');
var cookieParser = require('cookie-parser');
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

解决方案1:

代理中加上把解析后的 body 数据再转回来即可

const proxy = require('http-proxy-middleware');
var restream = function(proxyReq, req, res, options) {
       if (req.body) {
           let bodyData = JSON.stringify(req.body);
           // incase if content-type is application/x-www-form-urlencoded -> we need to change to application/json
           proxyReq.setHeader('Content-Type','application/json');
           proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
           // stream the content
           proxyReq.write(bodyData);
       }
   }
var apiProxy = proxy('/api',  {
   target: 'https://xxx.xxx.xxx.xxx',
   secure: false,
   changeOrigin: true,
   onProxyReq: restream
});
app.use(apiProxy);

解决方案2

使用express-http-proxy插件:

const proxy = require('express-http-proxy');
 // 反向代理(这里把需要进行反代的路径配置到这里即可)
  let opts = {
      preserveHostHdr: true,
      reqAsBuffer: true,
      //转发之前触发该方法
      proxyReqPathResolver: function(req, res) {
          //这个代理会把匹配到的url(下面的 ‘/api’等)去掉,转发过去直接404,这里手动加回来,
          req.url = req.baseUrl+req.url;
          return require('url').parse(req.url).path;
      },
  }

  app.use('/api',proxy('https://xxx.xxx.xxx.xxx',opts));
 
 

代理代码实例,proxy.js 文件,https://github.com/linzl008/proxySet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值