Javascript Nodejs输出-未找到域名

Javascript Nodejs输出-未找到域名,javascript,node.js,Javascript,Node.js,从技术上讲,这是我第一次尝试nodejs,坦率地说,我不确定我是否做对了。我正在创建一个本地服务器,它将流式传输来自远程服务器的输出。但是,当我运行代码并在浏览器中输入URL时,程序将失败,并显示以下消息: events.js:45 throw arguments[1]; // Unhandled 'error' event ^ Error: ENOTFOUND, Domain name not found at IOWatcher.callback

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

events.js:45
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: ENOTFOUND, Domain name not found
at IOWatcher.callback (dns.js:74:15)
我使用的URL是:127.0.0.1:9000/http://www.yahoo.fr. 在浏览器中,我看到了以下消息:

events.js:45
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: ENOTFOUND, Domain name not found
at IOWatcher.callback (dns.js:74:15)
未收到任何数据 无法加载网页,因为服务器未发送任何数据。 以下是一些建议: 稍后重新加载此网页。 错误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);

胡乱猜测:你的浏览器会自动请求
127.0.0.1:9000/favicon.ico
,然后你的程序会尝试解析
favicon.ico
,这显然会失败,并使你的程序在发送真正请求的任何数据之前崩溃。

为什么会有如此纠结的代码


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

您可以在侦听器回调中执行
console.log(out)
?让我们知道Node.js是否有任何响应数据要返回。

好吧,对于像我这样在这方面的新手来说,下面是我如何解决它的。它不干净,可以以更好的方式实施。请随意改变,提出建议。 代码:


这就是为什么我有两个变量(base和dest)来存储uri。我假设请求是有顺序的,对www.yahoo.fr的请求将出现在/favicon.ico之前。您可以将cd放入代码所在的目录中,并执行以下命令:touch favicon.icoWell,我想这只是因为我不太熟悉javascript和/或nodejs语法,所以我保持了这种方式。@Michael-Fair comment,但不是答案。你能返回一些静态json内容而不是out变量吗。看看客户的回复是否正常。。。