2011-09-25 20 views
8

मैं एक एपीआई के खिलाफ एक वेबपैप विकसित करता हूं। चूंकि एपीआई मेरे स्थानीय सिस्टम पर नहीं चल रहा है, इसलिए मुझे अनुरोध प्रॉक्सी करना होगा ताकि मैं क्रॉस डोमेन समस्याओं में भाग न सकूं। क्या ऐसा करने का कोई आसान तरीका है, इसलिए मेरा index.html स्थानीय और अन्य सभी GET, POST, PUT से भेज देगा, अनुरोध अनुरोध xyz.net/apiEndPoint पर जाएं।प्रॉक्सी नोडजेस

संपादित करें:

यह मेरा पहला समाधान लेकिन फ्लॉप काम

var express = require('express'), 
    app = express.createServer(), 
    httpProxy = require('http-proxy'); 


app.use(express.bodyParser()); 
app.listen(process.env.PORT || 1235); 

var proxy = new httpProxy.RoutingProxy(); 

app.get('/', function(req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 
app.get('/js/*', function(req, res) { 
    res.sendfile(__dirname + req.url); 
}); 
app.get('/css/*', function(req, res) { 
    res.sendfile(__dirname + req.url); 
}); 

app.all('/*', function(req, res) { 
    proxy.proxyRequest(req, res, { 
     host: 'http://apiUrl', 
     port: 80 
    }); 

}); 

यह सूचकांक, जे एस, सीएसएस फ़ाइलें की सेवा, लेकिन बाहरी api के लिए मार्ग बाकी न होगा। यह त्रुटि संदेश है जो मुझे मिला है:

An error has occurred: {"stack":"Error: ENOTFOUND, Domain name not found\n at IOWatcher.callback (dns.js:74:15)","message":"ENOTFOUND, Domain name not found","errno":4,"code":"ENOTFOUND"} 

उत्तर

4

readme for http-proxy पर एक नज़र डालें।

proxy.proxyRequest(req, res, { 
    host: 'localhost', 
    port: 9000 
}); 

त्रुटि संदेश के आधार पर यह लगता है कि आप proxyRequest विधि में एक फर्जी डोमेन नाम गुजर रहे हैं: यह कैसे proxyRequest कॉल करने के लिए का एक उदाहरण है।

+0

आप सही हैं कि होस्ट 'http: //' से शुरू होता है। इसे ठीक करने से इसे हटा दें। लेकिन मुझे पता है कि मुझे खाली प्रतिक्रिया मिली है: HTTP/1.1 400 खराब अनुरोध एक्स-संचालित-द्वारा: एक्सप्रेस सर्वर: अपाचे-कोयोट/1.1 सामग्री-लंबाई: 0 दिनांक: सूर्य, 25 सितंबर 2011 18:06: 22 जीएमटी कनेक्शन: स्टार्टर्स के लिए –

+0

@ एंड्रियासकोर्बर, मैं इस प्रश्न को संपादित करने या एक नया प्रश्न खोलने का सुझाव दूंगा। –

+1

ठीक है मैंने एक नया सवाल पूछा है। http://stackoverflow.com/questions/7559862/proxy-with-nodejs-and-express –

0

शायद आपको मेरा उत्तर here पर देखना चाहिए। यहां मैं प्रॉक्सी को प्रत्येक अनुरोध को पाइप करने के लिए अनुरोध पैकेज का उपयोग करता हूं और अनुरोधकर्ता को प्रतिक्रिया वापस पाइप करता हूं।

2

अन्य उत्तरों थोड़ा पुराना है।

यहाँ http-प्रॉक्सी 1.0 एक्सप्रेस के साथ उपयोग करने के लिए बताया गया है:

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

var apiProxy = httProxy.createProxyServer(); 

app.get("/api/*", function(req, res){ 
    apiProxy.web(req, res, { target: 'http://google.com:80' }); 
}); 
1

यहाँ प्रॉक्सी जो संशोधित कर सकते हैं अनुरोध/प्रतिक्रिया शरीर का एक उदाहरण है।

यह through मॉड्यूल का मूल्यांकन करता है जो पारदर्शी पढ़ने/लिखने की धारा लागू करता है।

var http = require('http'); 
var through = require('through'); 

http.createServer(function (clientRequest, clientResponse) { 

    var departureProcessor = through(function write(requestData){ 

     //log or modify requestData here 
     console.log("=======REQUEST FROM CLIENT TO SERVER CAPTURED========"); 
     console.log(requestData); 

     this.queue(requestData); 
    }); 

    var proxy = http.request({ hostname: "myServer.com", port: 80, path: clientRequest.url, method: 'GET'}, function (serverResponse) { 

     var arrivalProcessor = through(function write(responseData){ 

      //log or modify responseData here 
      console.log("======RESPONSE FROM SERVER TO CLIENT CAPTURED======"); 
      console.log(responseData); 

      this.queue(responseData); 
     }); 

     serverResponse.pipe(arrivalProcessor); 
     arrivalProcessor.pipe(clientResponse); 
    }); 

    clientRequest.pipe(departureProcessor, {end: true}); 
    departureProcessor.pipe(proxy, {end: true}); 

}).listen(3333);