2013-07-07 13 views
7

में डाल रहा request का उपयोग एक्सप्रेस में CouchDB के लिए निम्न रिवर्स प्रॉक्सी लागू करने के लिए:रिवर्स प्रॉक्सी पोस्ट पर लटकी हुई है और Node.js

app.all(/^\/db(.*)$/, function(req, res){ 
    var db_url = "http://localhost:5984/db" + req.params[0]; 
    req.pipe(request({ 
    uri: db_url, 
    method: req.method 
    })).pipe(res); 
}); 

जब प्राप्त अनुरोध कर, यह काम करता है: अनुरोध ग्राहक से जाना codeDB को node.js करने के लिए और फिर से सफलतापूर्वक वापस। पोस्ट और पुट अनुरोध अनिश्चित काल तक लटका। लॉग स्टेटमेंट प्रॉक्सी तक चलते हैं, लेकिन कॉच डीबी अनुरोध की प्राप्ति का संकेत नहीं देता है। यह क्यों हो रहा है, और यह कैसे तय किया जा सकता है?

उत्तर

7

एक्सप्रेस 'bodyparser मिडलवेयर एक तरीका का कारण बनता है कि पाइपिंग लटका में अनुरोध संशोधित करता है। यकीन नहीं क्यों, लेकिन आप अपने प्रॉक्सी को मिडलवेयर में बनाकर ठीक कर सकते हैं जो बॉडीपार्सर से पहले पकड़ता है। इस तरह:

// wherever your db lives 
var DATABASE_URL = 'http://localhost:5984/db'; 

// middleware itself, preceding any parsers 
app.use(function(req, res, next){ 
    var proxy_path = req.path.match(/^\/db(.*)$/); 
    if(proxy_path){ 
    var db_url = DATABASE_URL + proxy_path[1]; 
    req.pipe(request({ 
     uri: db_url, 
     method: req.method 
    })).pipe(res); 
    } else { 
    next(); 
    } 
}); 
// these blokes mess with the request 
app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
1

अनुरोध डिफ़ॉल्ट रूप से अनुरोध प्राप्त करता है। आपको विधि सेट करने की आवश्यकता है।

app.all(/^\/db(.*)$/, function(req, res){ 
    var db_url = ["http://localhost:5984/db", req.params[0]].join('/'); 
    req.pipe(request({ 
    url: db_url, 
    method: url.method 
    })).pipe(res); 
}); 

(कोड अपरीक्षित, मुझे पता है कि यह काम नहीं करता है, लेकिन यह करीब होना चाहिए)

+0

ऐ, ने कोशिश की; अच्छा नहीं। ऐसा इंगित करने के लिए उदाहरण कोड अपडेट किया गया। – garbados

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