2014-10-29 8 views
15

मैं Node.js परियोजना में काम कर रहा हूँ और मैं नोड Solrसॉकेट hangup नोड http-प्रॉक्सी को Node.js

के लिए एक प्रॉक्सी के रूप में कार्य करने के लिए प्रॉक्सी के लिए चाहते हैं अनुरोध पोस्ट करते समय: मैं 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) 

समस्या के कारण के बारे में कोई सुझाव

+1

से https://github.com/nodejitsu/node-http-proxy/issues/180#issuecomment-12244852 यह एक्सप्रेस का उपयोग कर के साथ कुछ करने के लिए प्रकट होता है – alandarev

उत्तर

13

मुझे लगता है कि इस मुद्दे से आता है या मिडलवेयर का डर HttpProxy से पहले bodyParser का उपयोग JSON बॉडी के साथ अनुरोध तोड़ देगा, इसलिए httpProxy को BodyParser से पहले उपयोग किया जाना चाहिए।

आप bodyParser के बारे में अधिक जानकारी के लिए this जांच सकते हैं।

+4

क्या होगा यदि मैं middlewares से पहले इसका इस्तेमाल नहीं कर सकते हैं? मेरा प्रॉक्सी सशर्त है और मध्यवर्ती पर निर्भर करता है ... – oleynikd

5

मैं इस मुद्दे 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 })); 
9

उपयोग एक त्रुटि के लिए सुनने के लिए कॉलबैक:

proxy.web(req, res, { target: 'http://mytarget.com:8080' }, function(e) { ... }); 

https://github.com/nodejitsu/node-http-proxy

+0

यह कॉलबैक जोड़ने से पूरे सर्वर को +1 क्रैश होने से रोका जाएगा –

संबंधित मुद्दे