2011-04-28 47 views
0

我剛剛開始使用nodejs,到目前爲止我非常喜歡它。不過,我在將它作爲中間人服務器/客戶端時遇到了一些小問題。通過nodejs處理xhr

爲了澄清,我試圖在客戶端使用nodejs,它將成爲服務器和客戶端瀏覽器之間的中間人。本質上,nodejs似乎是客戶端的服務器,並且看起來像服務器前面的客戶端。 所以,我得到它在本地主機上監聽端口8080,並且任何傳入的請求都由nodejs獲取。

我的問題是,我怎麼能讓nodejs在客戶端瀏覽器呈現之前分析請求?任何想法/鏈接/幫助非常感謝。

下面是簡單的代碼,我有:

var request = require('request'), 
    http = require('http'); 

// var url = require('url'); 
// URL.parse(string); 

var server = http.createServer(function (req, res) { 
    var dest = req.url.substr(1, req.url.length - 1); 
    //console.log(dest); 
    request.get({uri: dest}, function (err, response, html) { 
      console.log(html); 
      console.log(response); 
      res.end(html); 
    }); 
    console.log('fetched from ' + req.url); 
}); 

server.listen(3000); 

回答

1

所以,你實際上需要的是一個HTTP代理 ...你看node-http-proxy?它允許您自定義行爲,但提供了所有必需的功能,包括對WebSocket的支持。

1

@alienhard是正確的,你基本上想要一個反向代理,但我不會很快達到圖書館,因爲他建議。這對於節點來說很簡單。

var http = require("http") 
var util = require("util") 

http.createServer(function(req, rsp){ 

    var options = { 
     host: 'www.google.com', 
     port: 80, 
     path: req.url, 
     method: req.method, 
     headers: req.headers 
    } 

    proxy = http.request(options, function(response){ 
     rsp.writeHead(response.statusCode, response.headers) 

     console.log(response.statusCode) 
     console.log(response.headers) 

     response.on("data", function(chunk){ 
     console.log(chunk.toString()); 
     rsp.write(chunk) 
     }) 

     response.on("end", function(){ rsp.end() }) 
    }) 

    proxy.once("error", function(){ }) 
    util.pump(req, proxy) 
    req.on('end', function() { proxy.end() }) 

}).listen(3000)