Основные примеры Node.js не работают на Windows 7 - PullRequest
8 голосов
/ 18 декабря 2011

Я установил node.js из http://nodejs.org/#download, v0.6.6. Я использую 32-разрядную версию Windows 7.

Я проходил через различные темы онлайн и хочу поэкспериментировать, но не могу заставить работать node.js. Node запустит мой файл .js, но время ожидания любого запроса из браузера истечет.

Вот типичный пример Hello World, который не работает:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337);

Указание моего браузера на 127.0.0.1:1337 или localhost: 1337 не работает. Время ожидания запроса от браузера. Я также попытался прослушать (1337, «0.0.0.0») и прослушать (1337, «127.0.0.1»).

Я знаю, что сервер работает; если я нажму CTRL + C и остановлю узел, браузер немедленно вернется с ERR_CONNECTION_RESET.

Я также попытался запустить код в этой сущности, который не будет работать: https://gist.github.com/1339846. Я получаю консольный вывод "Listening!" и ничего больше.

Кроме того, я пробовал разные порты, и мой брандмауэр отключен через

netsh firewall set opmode mode=disable

Я попытался с полностью отключенным межсетевым экраном, и служба остановилась. Если я проверяю соединения с помощью netstat -noa, я вижу, что узел имеет несколько соединений, открытых для браузеров, все в состоянии CLOSE_WAIT. Похоже, что соединения происходят, но node.js просто не работает.

Функция обратного вызова, которая должна быть инициирована запросом, никогда не выполняется - я разбросал несколько операторов console.log в различных областях, и все они выполняются, за исключением любого в обратном вызове.

Я удалил, переустановил, попробовал пару предыдущих сборок, перезапустил мой компьютер ... ничего.

Любая помощь приветствуется!

ОБНОВЛЕНИЕ: Я почти сдался. Я перепробовал все, что мог придумать, и в итоге оказалось, что запускать node.js в экземпляре Ubuntu в VirtualBox проще, чем хвататься за соломинку.

Ответы [ 6 ]

8 голосов
/ 21 февраля 2014

!!!!!!Та же проблема произошла со мной ....

Вот решение, которое мне еще нигде не удалось найти:

Посмотрите Windows Firewall with Advanced Security и посмотрите, если Evented I/O for V8 JavaScriptзаблокирован или появляется два раза.

Если это так, разблокируйте его и удалите дублированную запись.Если вы устанавливаете / удаляете / устанавливаете nodeJs, там будет 2 записи.

Также при первом запуске узла открывается диалоговое окно «Брандмауэр окна» с вопросом, хотите ли вы разрешить узлу доступ к брандмауэру.Если вы нажмете «Нет» или просто закроете окно, не спрашивая, оно создаст Evented I/O for V8 JavaScript, и оно будет заблокировано.

3 голосов
/ 22 июля 2015

Я столкнулся с той же проблемой и, прочитав документацию, неожиданно столкнулся с тем, что, как мне кажется, является решением.В моем случае я заметил, что входящие запросы были доставлены на узел, но в ответе никогда не запускалось событие «конец».Таким образом, изменение входящих правил брандмауэра в Windows, похоже, не связано с проблемой.

Итак, http.createServer принимает один аргумент - функцию, которая должна включать параметр запроса и ответа.Параметр запроса, казалось, был там, где проблема.Параметр запроса является экземпляром http.incomingMessage.Этот класс имел только один тип события, но сам был также реализацией Stream.Readable, где я обнаружил событие «end», которое не было инициировано.Действительно, ни по какой другой причине, чтобы просто проверить, какое событие не было первым, я просто добавил прослушиватель для другого типа события («читаемый») и добавил к нему только строку console.log, которая заставила все это работать.

Таким образом, код выглядит примерно так:

var http = require("http");
http.createServer(function (request, response) {
    console.log('request');
    request.on('readable', function(){
        console.log('request readable');
    });
    request.on("end", function () {
        console.log('request end');
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        response.end('Hello HTTP!');
    });
}).listen(8080);

Приведенный выше код работает, в то время как предыдущая версия ниже без «читаемого» прослушивателя событий не отвечает:

var http = require("http");
http.createServer(function (request, response) {
    console.log('request');
    request.on("end", function () {
        console.log('request end');
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        response.end('Hello HTTP!');
    });
}).listen(8080);

Я не уверен, почему это работает, за исключением небольшой подсказки в документации, которая гласит:

В некоторых случаях прослушивание «читаемого» события приведет к чтению некоторых данныхво внутренний буфер базовой системы, если это еще не сделано.

2 голосов
/ 07 марта 2016
  1. Перейдите в «Панель управления \ Все элементы панели управления \ Брандмауэр Windows \ Разрешено» Программы "
  2. Нажмите Разрешить программы
  3. выберите nodejs из списка.

Это исправило все проблемы для меня

2 голосов
/ 01 января 2012

Я использую 32-разрядную версию Windows 7.

Какую версию Windows 7 вы используете?Например.Home Premium, Professional, Ultimate?

В потоке проекта npm github упоминаются аналогичные симптомы при установке модулей nodejs с использованием npm, и комментарии, похоже, сводятся к тому, что они вызваны Windows 7 Professional.,Это 32/64-битная версия, кажется, не имеет значения.

У меня как описанная вами проблема, так и проблема установки npm, и я работаю в 64-битной версии Windows 7 Professional.

Использование XPMode (обходной путь, упомянутый в ветке npm) позволил мне обойти обе эти проблемы.Хотя, я полагаю, что это всего лишь Windows-y-версия вашего использования Ubuntu в VirtualBox.

Другие обходные пути, которые были безуспешны:

  • Создайте / запустите Debug build v0.6.6
  • Создание / запуск отладочной версии v0.6.5 (фактически сбой при запуске)
  • Установка различных режимов совместимости на установленном node.exe
  • Предварительно упакованный установщик Windows изv0.6.5
2 голосов
/ 18 декабря 2011

Я только что попробовал, и это работает для меня.Убедитесь, что вы не блокируете узел брандмауэром.

1 голос
/ 10 сентября 2013

У меня возникла та же проблема с этим кодом (пример Http-сервера по этой ссылке: http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/)

var http = require("http");
http.createServer(function (request, response) {
    request.on("end", function () {
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        response.end('Hello HTTP!');
    });
}).listen(8080);

Я пробовал 64-разрядную версию Windows 7, виртуальную машину Windows XP, виртуальную машину Ubuntu... ничего! Это сработало только после того, как я прокомментировал строку «request.on». Ваш пример (у которого нет этой строки) работал нормально для меня. Я использую последнюю стабильную сборку из node.js (v0.10.18для Windows или Linux). Надеюсь, что это помогает всем, кто испытывает проблемы с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...