Socket.IO - require не определен

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

Неподготовлено ReferenceError: require не определен

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

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

<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, и это работает, именованный сервер .js, только измененный порт.

Ответы

Ответ 1

Если ваш script не поступает с вашего веб-сервера, это не сработает:

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

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

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

Ответ 2

Вы используете node.js вдоль PHP на своем сервере?

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

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

Ответ 3

Ваша библиотека включает (/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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

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

Ответ 7

У меня была та же проблема, и я подтверждаю, что решение @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, a drupal_add_js('http://localhost:4001/socket.io/socket.io.js', array('type' => 'external', 'group' => JS_LIBRARY)); внутри hook_init выполняет трюк.

Ответ 8

На самом деле мне удавалось заставить 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 - проблема, которую я еще не пытался решить.

Приветствия