Socket.IO - требование не определено - PullRequest
16 голосов
/ 20 ноября 2011

Я пытаюсь заставить работать socket.io, но теперь в Chrome я получаю сообщение об ошибке:

Uncaught ReferenceError: require не определено

client.php: 9Uncaught ReferenceError: io не определено

Я изменил способ включения файла socket.io.js, поскольку он не существует где-то еще:

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

ЕслиЯ пытаюсь

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

Я получаю: Не удалось загрузить ресурс: сервер ответил со статусом 404 (Не найдено)

Это на Ubuntu с последнейвсего

Я использую код сервера от http://socket.io/ для работы в той же папке, что и client.php, и это работает, с именем server.js, только измененный порт.

Ответы [ 8 ]

31 голосов
/ 20 ноября 2011

Если ваш скрипт не приходит с вашего веб-сервера, он не будет работать:

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

Вы должны явно указать хост и порт:

<script src="http://localhost:<port>/socket.io/socket.io.js"></script>
16 голосов
/ 21 ноября 2011

Вы запускаете node.js вместе с PHP на вашем сервере?

Существует два пакета "socket.io", сервер и клиент . Вы пытаетесь загрузить сервер one (/node_modules/socket.io/lib/socket.io.js) в браузер. Сценарий, который вам нужен, называется socket.io-client , и вы можете найти его по адресу https://raw.github.com/LearnBoost/socket.io-client/master/socket.io-client.js

Что происходит, так это то, что socket.io автоматически подает файл /socket.io/socket.io.js (клиентский) с порта 80 , когда вы запускаете узел на порту 80 . В вашем случае Apache уже находится на порте 80, поэтому вам нужно передать файл из него вручную.

5 голосов
/ 04 января 2013

Ваша библиотека включила (/socket.io/socket.io.js) в кодировку браузера клиента, вероятно, в порядке.Но вы можете указывать на неправильную копию socket.io.js. Если вы установили socket.io с использованием (npm install socket.io), то вам может потребоваться поискать в следующем каталоге версию клиента socket.io.js:

C:\Program Files (x86)\nodejs\node_modules\socket.io\node_modules\socket.io-client\dist\socket.io.js

Если он есть, вы можете скопировать этот модуль в каталог веб-публикации или, в качестве альтернативы, изменить физический путь, на который указывает виртуальный каталог.

1 голос
/ 27 апреля 2013

Как уже отмечали другие, когда io запускается на стороне сервера, обслуживается "автоматический" сервис "socket.io.js" - и он разветвляется на другие js-файлы в своем каталоге lib.

Что я хочу добавить, так это то, что это не интуитивно, и нет, ваш обычный веб-сервер не может обслуживать этот файл - ошибки просто становятся более странными и кажущимися противоречивыми (не определены и т. Д.).Это не обычный файл js, и я бы хотел, чтобы все учебники подчеркивали это.

В любом случае, если вы работаете, например, за nginx, установите для параметров порта тот же порт, который назначен для узла - порт 3000 в моем случае.Я использовал этот порт в клиенте следующим образом:

  <script src="http://localhost:3000/socket.io/socket.io.js"></script>

... а затем также использовал порт 3000 в коде сервера - существует слишком много способов / версий, для которых вы можете закодировать код server-js-codeпример, чтобы сделать что-нибудь, но сбить с толку большинство, кто использует «другой путь».

1 голос
/ 20 июля 2012

Я попробовал то, что thejh говорит, и это работает.Мне нужно было указать хост и порт.Для приложения узла, прослушивающего порт 81, мне нужно было указать порт 81 в клиентском javascript.Nevermind /socket.io/socket.io.js не существует в vhost, узел компенсирует это во время выполнения.

0 голосов
/ 17 февраля 2014

На самом деле мне удалось заставить Apache обслуживать эти файлы, на самом деле сегодня.

Просто создайте копию (я на самом деле скопировал файлы, софт-ссылки могут быть в порядке, я не пробовал) содержимого node_modules / socket.io / node_modules / socket.io-client / dist для вашего веб-корня. Для моей установки socket.io (0.9.16), где я установил socket.io глобально, эти две команды сделали свое дело:

sudo cp -av /usr/lib/node_modules/socket.io/node_modules/socket.io-client/dist /var/www/socket.io 
chown -R www-data:www-data /var/www/socket.io

Это было в Ubuntu 13.10 на обычном стеке LAMP, установленном до того, как я добавил node.js.

Теперь синхронизация этой копии по мере выпуска новых версий socket.io является проблемой, которую я еще не пытался решить.

Приветствия

0 голосов
/ 19 апреля 2012

У меня была такая же проблема, и я подтверждаю, что решение @ thejh сработало. Однако я не был уверен относительно того, «каким» был сервер, когда я прочитал его рекомендацию. У меня действительно работает MAMP на порту 80. И приведенный ниже код будет "сервером node.js", который работает на порту 8001.

Как только я запустил сервер node.js (запустил приведенный ниже код), посещение http://localhost:4001/socket.io/socket.io.js возвращает файл javascript.

/* Node.js server */

var sys  = require('sys');
var io   = require('socket.io');
var http = require('http')
server = http.createServer(function(req, res) { 
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('http server started');
  res.end(); 
});
server.listen(4001);


// socket.io 
var socket = io.listen(server); 
socket.on('connection', function(client) {

  client.on('message', function(message) {
    // We're in!
    console.log('received client message '+ message);
  }); 
  client.on('disconnect', function() {});
  socket.send('welcome to the local node.js server!');
});

Для тех, кто в Drupal, drupal_add_js('http://localhost:4001/socket.io/socket.io.js', array('type' => 'external', 'group' => JS_LIBRARY)); в hook_init делает свое дело.

0 голосов
/ 22 ноября 2011

Если вы видите что-то вроде require() is not defined, это может быть связано с тем, что используемая вами библиотека JavaScript имеет формат AMD (определение асинхронного модуля) . Попробуйте использовать RequireJS (полнофункциональный) или библиотека JS curl (меньше, проще) вместо загрузки SocketIO.

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