nodejs http-proxy不转发put请求

我已经使用http-proxy和express中间件做了一个代理。 但是,它不会转发PUT请求,这对于我正在代理的应用程序是必不可less的。 我究竟做错了什么?

(代理服务器的目的是为代理服务器后面的应用程序提供身份validation,如果还有其他方法可以这样做的话,我将不胜感激)

var proxy = new httpProxy.RoutingProxy(); var app = express(); app.configure(function() { app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.engine('ejs', require('ejs-locals')); app.use(express.logger()); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.session({secret: 'rupert'})); app.use(flash()); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.use(function(req, res) { proxy.proxyRequest(req, res, { host: 'localhost', port: 8080 }); }); app.use(express.static(__dirname + '/../../public')); }); app.get('/login', function(req, res){ res.render('login', { user: req.user, message: req.flash('error') }); }); app.post('/login', passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), function(req, res) { res.redirect('/'); }); app.get('/logout', function(req, res){ req.logout(); res.redirect('/') }); app.all('/*', function(req, res, next) { return next(); }); app.listen(3000,'localhost'); 

您可以尝试使用http-proxy的缓冲区function,如下所示: https : //github.com/nodejitsu/node-http-proxy/issues/180

或者,对请求对象expression非标准的东西可能会有问题:请参阅https://github.com/nodejitsu/node-http-proxy/issues/153上的问题#153

特别是来自Marak的这个回应:“这是一个明显的问题。

Connect / Express中间件正在为您的响应对象做非标准的事情,中断stream式传输。 尝试使用原始请求模块而不是http-proxy。

如果您需要适当的中间件堆栈,请查看https://github.com/flatiron/union

不知道工会是否会解决这个问题,但似乎expression式改变了http-proxy无法处理的请求。