`require 'socket.io-client.js'` не работает

Мне удалось запустить базовое серверное приложение socket.io на моем собственном сервере и запросить его напрямую через любой веб-браузер (я пробовал FF, chrome и IE7, и все это работало).

Теперь проблема заключается в том, что пример кода клиента не работает для меня, и я получаю следующую ошибку в консоли javascript в chrome:

"Uncaught ReferenceError: require is notfined" в отношении этой строки кода в socket.io.js: var client = require('socket.io-client');

Это приводит меня к мысли, что он не распознает требуемый период команд, что кажется странным. Несколько других вещей - у меня запущен apache, и поэтому я переместил все мои файлы socket.io в мой каталог apache htdocs для доступа через http-порт 80, которые были установлены с помощью cygwin, и руководство по адресу: https://github.com/joyent/node/wiki/Building-node.js-on-Cygwin-(Windows)

Файлы socket.io также были установлены в каталоге cygwin на моем диске c: в Windows, где они бесполезны, если к ним обращается apache. Еще одно замечание - у меня есть файл socket.io-client.js, но когда я открыл его для редактирования с помощью wordpad, он выглядит поврежденным, имея только одну строку текста внутри: <symlink>ÿþi

3 ответа

Функция require() является функцией Node.js и работает только с Javascript, который запускается на стороне сервера. Чтобы включить файлы в браузер, вы должны будете использовать обычный метод:

<script src="/socket.io/socket.io.js"></script>

Node.js обычно настраивается таким образом, что сервер socket.io подключается к экземпляру веб-сервера, который также является частью сервера Node.js. Примеры кода, взятые непосредственно со страницы "Как использовать" на http://socket.io/, это будет на стороне сервера:

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')
app.listen(80);

Если используется как указано выше, Node.js является сервером, который также обслуживает статическую часть веб-страницы, а адрес сервера Node.js является ссылкой для включения клиентских сценариев.

Другой вариант использования - это когда статический html обслуживается вашим основным веб-сервером, и вы пытаетесь подключиться к экземпляру Node.js, который может находиться по другому адресу, другому порту или обоим. Socket.io.js не обслуживается вашим основным веб-сервером. Он обслуживается непосредственно socket.io, запущенным на сервере Node.js. Вы должны предоставить клиентскому браузеру адрес сервера Node.js, чтобы получить файл Javascript на стороне клиента socket.io, например:

<script src="http://nodejs.address:port/socket.io/socket.io.js"></script>

<script>
  var socket = io.connect('http://nodejs.address:port');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
});
</script>

Как примечание, есть клиентские библиотеки JavaScript, которые предоставляют функцию require(), проверьте Javascript require на стороне клиента

Вы можете использовать Browserify ( http://browserify.org/) или WebPack ( http://webpack.github.io/) для использования узловых требований CommonJS на стороне клиента.

Я использую browserify для управления всеми ресурсами require() для кода на стороне браузера.

Тем не менее, я смог запросить socket.io-client в коде моего браузера следующим образом:

var io = require('socket.io-client');
var $ = require('jquery');

var socket = io();
$('form').submit(function(){
    socket.emit('chat message', $('#m').val());
    $('#m').val('');
    return false;
});
socket.on('chat message', function(msg){
    $('#messages').append($('&lt;li&gt;').text(msg));
});

В отличие от следующего фрагмента, использующего традиционный формат тега script, который можно найти на примере github socket.io: https://github.com/rauchg/chat-example/blob/master/index.html

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
    var socket = io();
    $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
    });
    socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
    });
</script>

socket.io-client можно загрузить в вашей среде разработки как узел по модулю, выполнив:

npm install socket.io-client
Другие вопросы по тегам