【问题标题】:nodejs http-proxy not forwarding put requestsnodejs http-proxy不转发put请求
【发布时间】:2013-09-16 22:01:43
【问题描述】:

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

(代理服务器的目的是为代理背后的应用程序提供身份验证。如果有其他方法可以做到这一点,我将不胜感激。)

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');

【问题讨论】:

标签: node.js express http-proxy


【解决方案1】:

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

另外,Express 对请求对象执行非标准操作可能会出现问题:请参阅https://github.com/nodejitsu/node-http-proxy/issues/153 的 issue#153

特别是 Marak 的回复: "这是一个明确的问题。

Connect / Express 中间件正在对您的响应对象执行非标准操作,从而中断流式传输。尝试使用原始请求模块而不是 http-proxy。

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

不知道联合是否会解决这个问题,但似乎 express 改变了超出 http-proxy 可以处理的请求。

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 2015-06-14
    • 2019-09-27
    • 2020-10-27
    相关资源
    最近更新 更多