Nodejs输出 - 未找到域名

时间:2011-04-29 07:59:02

标签: javascript node.js

从技术上讲,这是我在nodejs的第一次尝试,坦率地说,我不确定我是否做得对。我正在创建一个本地服务器,它将从远程服务器流式传输输出。但是,当我运行我的代码并在浏览器中输入URL时,程序将失败并显示以下消息:

events.js:45
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: ENOTFOUND, Domain name not found
at IOWatcher.callback (dns.js:74:15)

我使用的网址是:127.0.0.1:9000 / http://www.yahoo.fr。在浏览器中,我收到以下消息:

未收到任何数据     无法加载网页,因为服务器未发送任何数据。     以下是一些建议:     稍后重新载入此网页。     错误324(net :: ERR_EMPTY_RESPONSE):服务器关闭连接而不发送任何数据。

非常感谢任何帮助。 这是代码:

var base, dest, node_client,
count = 0,
url = require('url'),
util = require('util'),
http = require('http'),
http_client = require('http'),
request = require('request'),
events = require('events'),  
httpProxy = require('./lib/node-http-proxy'),

data_emitter = new events.EventEmitter();

httpProxy.createServer(9000, 'localhost').listen(8000);

http.createServer(function (req, res) {

    if(!count)
    { 
        base = url.parse(req.url).pathname;
        node_client = http_client.createClient(80, base);
        count++;
    } else {
        dest = req.url.substr(1, req.url.length -1);
    }

    request = node_client.request("GET", dest, {"host": base});
    request.addListener("response", function (response) {
        var body = "";
        response.addListener("data", function (data) {
            body +=data;
        }); 

        response.addListener("end", function () {
            var out = JSON.parse(body);
            if(out.length > 0) {
                data_emitter.emit("out", out);
            }
        });
    });

   // request.close();

    var listener = data_emitter.addListener("data", function(out) {
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.write(JSON.stringify(out));
        res.close();
    });



}).listen(9000);

4 个答案:

答案 0 :(得分:0)

狂野猜测:您的浏览器会自动请求127.0.0.1:9000/favicon.ico,然后您的程序会尝试解析明显失败的favicon.ico并使您的程序崩溃,然后才能发送 real 请求。

答案 1 :(得分:0)

为什么这么纠结的代码?

这是避免嵌套回调和使用命名函数的情况。如果您重构代码,那么人们更有可能帮助您。

答案 2 :(得分:0)

你能在你的听众回调中做console.log(out)吗?如果Node.js有任何回复数据,请告诉我们。

答案 3 :(得分:0)

嗯,对于像我这样的新手来说,这就是我解决它的方法。它不干净,可以更好的方式实施。随意改变,给出建议。 代码:

var url = require('url'),
http = require('http'),
request = require('request'),
httpProxy = require('./lib/node-http-proxy'),
des = '',

util = require('util'),
colors = require('colors'),

is_host = true;

httpProxy.createServer(9000, 'localhost').listen(8000);

var server = http.createServer(function (req, res) {
var pathname = '';

if(is_host) {
    dest = req.url.substr(0, req.url.length -1);
    pathname = dest;
    is_host = false;
} else {
    pathname = req.url.substr(0, req.url.length);
    if(pathname.charAt(0) == "/") {
        console.log('new request');
        console.log(pathname);
        pathname = dest + pathname;
    }
}

console.log(pathname);
request.get({uri: pathname}, function (err, response, html) {
        res.end(html);
});
console.log('fetched from ' + pathname);
});

server.listen(9000);