Ответ 1
EADDRINUSE означает, что адрес уже используется, поэтому он не может получить сокет. Что-то еще работает на порту 80 на вашем компьютере? 80 обычно используется веб-серверами.
Вы также можете попробовать его на другом порту.
Причина, по которой вы видите пустой файл, не подключается к серверу node (так как он не может получить сокет), так что новостное событие никогда не будет вызвано. Он может даже подключиться к сокету любого другого, работающего на 80, который никогда не испустит это событие:)
После того, как вы разрешите конфликт порта, когда вы запустите сервер, он должен просто сказать:
info - socket.io запущен
и теперь он ждет соединений.
Убедитесь, что вы обновили строку htm до вашего порта. Например, если 81:
var socket = io.connect('http://localhost:81'); // note the :81
EDIT: Я просто попробовал это, и в файле htm мне пришлось установить относительный путь к файлу socket.io.js. После установки через npm он был здесь, в моем каталоге.
<script src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
Убедитесь, что путь относится к файлу htm (не начинается с /). Вот как я узнал, где моя:
find . -name 'socket.io.js'
В Win: dir socket.io.js/s
Вы также должны запустить хост с (на * nix вам может понадобиться sudo спереди):
node host.js
Последнее, что я делал при попытке попробовать сменить пару строк в файле htm, чтобы я мог видеть окно предупреждения в случае события:
socket.on('news', function (data) {
alert(JSON.stringify(data));