我正在创建一个读取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
函数取消所有其他请求。
非常感谢任何帮助:)
答案 0 :(得分:0)
显然这个问题在使用Node 0.4.0
时出现,并且在升级到0.4.3
后很高兴地消失了,幸运的是http服务器在end
事件被触发后运行正常。
一个有趣的事情是替换vm module
的eval(fullchunk)
,证明最好的实现和结果受限于它自己的沙箱:
require("vm").runInNewContext(fullchunk, {require: require});
希望不知怎的,这可能有用