NodeJS process.stdin`end`事件破坏了http.server动作

时间:2011-03-23 11:02:29

标签: events process node.js eval stdin

我正在创建一个读取STDIN的小程序,并为每个数据块增加一个字符串,如下所示:

var fullchunk;

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function (chunk) {

    if (!fullchunk) {
        fullchunk = "";
    }

    fullchunk += chunk;

});

process.stdin.once('end', function () {

   process.stdin.removeAllListeners('data');
   eval(fullchunk);

});

但不知怎的,似乎我不能在这里使用end事件,因为当我通过stdin发送的文本类似于http服务器时,它将无法正常运行,但如果我只使用onData事件中没有声明任何内容的end事件。

//STDIN content

require("http").createServer(function(request, response) { 

    response.writeHead(200);
    response.end("Hello World");

}).listen(3000);

所以这肯定是一件我无法理解为什么一个http服务器动作继续运行但它没有响应我的请求,不确定这是否有任何与主函数继承的变量作用域或如果end函数取消所有其他请求。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

显然这个问题在使用Node 0.4.0时出现,并且在升级到0.4.3后很高兴地消失了,幸运的是http服务器在end事件被触发后运行正常。 一个有趣的事情是替换vm moduleeval(fullchunk),证明最好的实现和结果受限于它自己的沙箱:

require("vm").runInNewContext(fullchunk, {require: require});

希望不知怎的,这可能有用