`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($('<li>').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