Событие NodeJS process.stdin `end` прерывает действие http.server - PullRequest
1 голос
/ 23 марта 2011

Я создаю небольшую программу, которая читает 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 продолжает выполняться с этим, но оно не реагирует на мои запросы, не уверенный, имеет ли это что-либо с переменной scope, которая наследуется основной функцией, или если функция end отменяет все остальные запросы.

Любая помощь будет чрезвычайно ценится:)

1 Ответ

0 голосов
/ 25 марта 2011

Очевидно, эта проблема обнаружилась при использовании узла 0.4.0 и с радостью исчезла после обновления до 0.4.3, и к счастью, http-сервер может нормально работать после запуска события end.Одна интересная вещь состояла в том, чтобы заменить eval(fullchunk) для vm module, доказав наилучшую реализацию и результат, ограниченный его собственной песочницей:полезно

...