通过nodejs处理xhr

时间:2011-04-28 20:23:06

标签: javascript node.js xmlhttprequest

我刚开始使用nodejs,到目前为止我非常喜欢它。但是,我有一些小问题,使它成为一个中间人服务器/客户端。

为了澄清,我正在尝试在客户端使用nodejs,它将是服务器和客户端浏览器之间的中间人。本质上,nodejs似乎是客户端的服务器,看起来像服务器前面的客户端。 所以,我让它在localhost上侦听端口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);

2 个答案:

答案 0 :(得分:1)

所以,你真正需要的是一个 http代理 ...你看过node-http-proxy吗?它允许您自定义行为,但提供所有必需的功能,包括对WebSockets的支持。

答案 1 :(得分:1)

@alienhard是正确的,你基本上想要一个反向代理,但我不会像他建议的那样快速找到一个库。使用node非常容易。

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)