[英]Socket hangup while posting request to Node-http-proxy Node.js
我在Node.js项目中工作,我希望节点充当solr的代理
对于代理:我使用了Node-http-proxy 。 问题是,在获取请求的情况下代理工作非常好,但是在发出请求的情况下,它会导致套接字挂起异常
这是我的节点代码示例
var express = require('express');
var router = express.Router();
var http = require('http');
var httpProxy = require('http-proxy')
var proxyOptions = {
host: "127.0.0.1",
port: 8983
};
var proxy = httpProxy.createProxyServer(proxyOptions);
// It works excellent in GET request
router.get('/solr/*', function(req, res) {
proxy.web(req, res, {
target: 'http://' + proxyOptions.host + ':' + proxyOptions.port
});
})
// the socket hang up in post request
router.post('/solr/*', function(req, res) {
console.log('Post Request');
proxy.web(req, res, {
target: 'http://' + proxyOptions.host + ':' + proxyOptions.port
});
})
这是节点控制台中一段时间后的错误
Error: socket hang up
at createHangUpError (http.js:1476:15)
at Socket.socketOnEnd [as onend] (http.js:1572:23)
at Socket.g (events.js:180:16)
at Socket.emit (events.js:117:20)
at _stream_readable.js:943:16
at process._tickCallback (node.js:419:13)
有关问题原因的任何建议
我认为问题来自中间件的顺序。 在httpProxy之前使用bodyParser会破坏JSON主体的请求,因此应该在bodyParser之前使用httpProxy。
您可能需要查看此内容以获取有关bodyParser的更多信息。
使用回调来侦听错误:
proxy.web(req, res, { target: 'http://mytarget.com:8080' }, function(e) { ... });
在这个问题的帮助下我找到了解决这个问题的方法https://github.com/nodejitsu/node-http-proxy/issues/180#issuecomment-12244852
解决方案是在使用bodyparser之前使用中间件进行代理
代码示例
// use middleware first
app.post('/solr/*',function(req, res) {
console.log('POST REQUEST')
//res.end();
proxy.web(req, res, {
target: 'http://' + proxyOptions.host + ':' + proxyOptions.port
});
})
app.use(logger('dev'));
// use bodyparser after that
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.