2012-10-06 43 views
17

के साथ प्रतिक्रिया शीर्षलेखों को पुनर्लेखित करें मैं node-http-proxy का उपयोग कर रहा हूं और शीर्षलेख के लिए विशेष प्रतिक्रिया देखना चाहता हूं और यदि आवश्यक हो तो इसे फिर से लिखना चाहता हूं। यहां किसी को भी पर सुझाव हैं?नोड-एचटीएमएल-प्रॉक्सी

मेरा प्रॉक्सी सर्वर कुछ अलग नोड सर्वर के सामने के रूप में एक जावा वेबपैप के रूप में बैठता है। जावा ऐप एक कुकी सेट कर रहा है, लेकिन कुकी में एक पथ है जो वेबपैप के संदर्भ से संबंधित है। मुझे कुकी सुरक्षित होने की आवश्यकता है और जावा एप्लिकेशन को संशोधित किए बिना रूट करने का मार्ग है।

दूसरे शब्दों में, निम्नलिखित हैडर दिया जाता है:

set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly 

और मैं के लिए पथ मूल्य के पुनर्लेखन के लिए करना चाहते हैं:

set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure 

मैं स्पष्ट नहीं कर रहा हूँ कि कैसे मैं इस करना होगा नोड-http-प्रॉक्सी का उपयोग कर। सुझाव? क्या इससे मदद करने के लिए मिडलवेयर है?

+0

यदि कोई अन्य व्यक्ति इस प्रश्न पर आता है, तो gzip कनेक्ट मिडलवेयर एक पैटर्न का उपयोग करता है जो मेरी समस्या को हल करने में सक्षम हो सकता है। मैंने अपने स्वयं के मिडलवेयर को जीजीआईपी कार्यान्वयन पर बाधित कर दिया है, लेकिन इसे पूरी तरह से काम करने के लिए समय नहीं लिया है। हालांकि, ऐसा लगता है कि यह थोड़ा और tweaking के साथ काम करेगा। Https://github.com/nodejitsu/node-http-proxy/blob/master/examples/middleware/gzip-middleware.js – Tauren

उत्तर

24

आप प्रतिक्रिया ऑब्जेक्ट के लेखन कार्य को ओवरलोड करके प्राप्त कर सकते हैं। उदाहरण के लिए, यह कोड 'foo' प्रतिक्रिया शीर्षलेख को 'बार' मान पर सेट करेगा। मैंने संकेत दिया है कि आप हेडर मानों को बदलने के लिए अपना तर्क जोड़ सकते हैं।

जावास्क्रिप्ट मेरी प्राथमिक भाषा नहीं है, इसलिए लिखने के तरीके को अधिभारित करने के लिए एक और बेवकूफ तरीका हो सकता है।

httpProxy = require('http-proxy'); 

httpProxy.createServer(function (req, res, proxy) { 

    res.oldWriteHead = res.writeHead; 
    res.writeHead = function(statusCode, headers) { 
    /* add logic to change headers here */ 
    var contentType = res.getHeader('content-type'); 
    res.setHeader('content-type', 'text/plain'); 

    // old way: might not work now 
    // as headers param is not always provided 
    // https://github.com/nodejitsu/node-http-proxy/pull/260/files 
    // headers['foo'] = 'bar';  

    res.oldWriteHead(statusCode, headers); 
    } 

    proxy.proxyRequest(req, res, { 
    host: 'localhost', 
    port: 3000 
    }); 
}).listen(8000); 
+1

धन्यवाद! यह जवाब अनिवार्य रूप से वही है जो मैंने किया है। बस यहां वापस आने और जवाब जोड़ने के लिए भूल गए। मुझे इस कोड की जांच करके इसे कैसे किया जाए इसका एक उदाहरण मिला: https://github.com/nateps/connect-gzip/blob/master/lib/gzip.js – Tauren

-1

मैंने इस कोड का परीक्षण नहीं किया है, लेकिन अनुरोध भेजने से पहले आपको अपने शीर्षलेख को संपादित करने की अनुमति देनी चाहिए। अगर यह काम करता है तो मुझे बताएं।

var httpProxy = require('http-proxy'); 

var server = httpProxy.createServer(function (req, res, proxy) { 
    var buffer = httpProxy.buffer(req); 
    req.headers['x-host'] = process.env.PROXY_URI; 
    proxy.proxyRequest(req, res, { 
    host: '127.0.0.1', 
    port: 9000, 
    }); 
}); 
+1

देखें आपका कोड अनुरोध पर एक शीर्षलेख सेट कर रहा है। मुझे * प्रतिक्रिया * पर एक शीर्षलेख बदलने की जरूरत है। – Tauren