【发布时间】:2016-04-05 02:33:55
【问题描述】:
我有一个 node/express 代理设置,使用 http-proxy-middleware 将请求路由到 java-tomcat Web 服务(代理目标)。
在将请求转发到代理目标之前,我需要将 POST 表单数据注入到上下文类型为“application/x-www-form-urlencoded”的请求原始正文中。在将响应发送到客户端之前,代理响应需要删除相同的 post 参数。
我使用了许多不同的代理,包括 http-proxy、http-proxy-middleware、node-proxy 和 express-proxy,但这些模块似乎都没有可用的解决方案来允许 POST 参数操作
这个问题最初发布于 https://github.com/chimurai/http-proxy-middleware/issues/61#issuecomment-205494577
'use strict';
var express = require('express');
var router = express.Router();
//var request = require("request");
var proxy_filter = function (path, req) {
return path.match('^/report') && ( req.method === 'GET' || req.method === 'POST' );
};
var proxy_options = {
target: 'http://localhost:8080',
logLevel: 'debug',
//logProvider:
onError(err, req, res) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end('Something went wrong. And we are reporting a custom error message.' + err);
},
onProxyRes(proxyRes, req, res) {
//proxyRes.headers['x-added'] = 'foobar'; // add new header to response
//delete proxyRes.headers['x-removed']; // remove header from response
},
onProxyReq(proxyReq, req, res) {
if ( req.method == "POST" && req.body ) {
proxyReq.write( encodeURIComponent( JSON.stringify( req.body ) ) );
proxyReq.end();
}
}
};
// Proxy configuration
var proxy = require( 'http-proxy-middleware' )( proxy_filter, proxy_options );
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Node.js Express Proxy Test' });
});
router.all('/report/*', function( req, res, next ) {
//req.body.jdbc_sas = 'jdbc:postgresql://pg_dev:5432/sasdb';
//req.body.jdbc_agency = 'jdbc:postgresql://pg_dev:5432/agency0329';
//console.log('proxy body:',req.body);
proxy( req, res, next );
} );
module.exports = router;
非常感谢任何建议。
尊敬的,
沃伦。
【问题讨论】:
标签: javascript node.js express proxy