2014-04-20 2 views
4

Итак, я пытаюсь заставить чат работать на моем сайте, а когда я тестировал локально, он отлично работал, потому что порт 8080 на моем локальном хосте был доступный и все такое хорошее. Но теперь я подтолкнул свой код к своему приложению Heroku, и когда я пытаюсь загрузить свою страницу чата, я получаю сообщение о том, что он не может получить localhost: 8080/socket.io/socket.io.js.Node.js /socket.io/socket.io.js не найден express 4.0

Я видел node.js /socket.io/socket.io.js not found и пробовал предложения, но никто не работал, даже перемещение файла socket.io.js в файл ресурсов не сработало. Я предполагаю, что это потому, что я использую express 4.0?

Любая помощь будет оценена Благодарности

Edit: Так, чтобы добавить больше деталей, так как мой вопрос может показаться немного расплывчатым, вот мой отношение app.js код:

var client = require('socket.io').listen(8080).sockets; 

В мой нефритовый файл на странице чата, у меня есть:

script (src = `'http://localhost:8080/socket.io/socket.io.js`') 

и позже на

var socket = io.connect(`'http://localhost:8080`'); 

и все это работает на локальном хосте (я загружаю порт 5000, socket.io подключен к порту 8080). Я делаю это, используя «стартовый станок» с toolkelt герою.

Когда я пытаюсь изменить их для работы с герокой, он ломается, и я не уверен, как это исправить. Надеюсь, это немного изменит вопрос.

Edit 2: Я бегу: выразить 4.0.0

socket.io 0.9.16

узел 0.10.x

Благодарности

+0

может отправить сообщение об ошибке – vipulsodha

ответ

7

У вас есть явный маршрут в express, который ловит все остальные маршруты? Нечто подобное возможно:

app.get("/", handlers.home); 
app.get("/..." ...); 
... 
app.get("*", handlers.error); 

Это может держать socket.io от того, чтобы разместить свой собственный JS файл для клиента. Существует простой способ исправить это, поскольку у вас, вероятно, уже есть настройка или static в экспресс.Что-то вроде:

app.use(express.static("public"));

Создайте новую папку с именем socket.io и скопировать соответствующий socket.io.js файл в указанную папку, и все должно быть хорошо. Однако обратите внимание, что есть два файла с именем socket.io.js !! Итак, если вы видите что-то наподобие "Uncaught ReferenceError: require is not defined", значит, вы скопировали файл стороны сервера «node-ey». Вот правильный клиент файл для копирования:

app_dir/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.min.js

Примечание @BHendricks: я бы просто отправил в ответ на ваш комментарий, но я в настоящее время не хватает требуемой репутации.

Редактировать: Вопрос OPs, вероятно, имеет больше общего с проблемой «localhost». При подключении к клиенту (скажем, вашего домашнего IP-адреса), насколько известно вашему браузеру - localhost подразумевает соединение с машиной, на которой размещается локальный хостинг. Так как ваша домашняя машина (или телефон) не поддерживает socket.io, это не работает.

Что вам нужно сделать, так это подключить сервер к информации о соединении сокетов (либо полное имя хоста, и т. Д.). Это можно сделать, когда сервер «отображает» страницу с клиентским соединением.

3

Что происходит, когда вы идете до http://localhost:8080/socket.io/socket.io.js?

Это 404? Если это так, вам нужно убедиться, что у вас есть это в каталоге, в котором Express настроен на статически.

app.use(express.static(__dirname + '/public')); 

Затем поместите файл socket.io.js в public/socket.io/socket.io.js (по отношению к файлу app.js)

Перезапустите сервер и посмотреть, поможет ли это.

В принципе, Express не поддерживает файлы статически из файловой системы, если вы явно не укажете, с чего их можно сопоставить.

+0

Я пробовал этот подход, и я изменил свой сценарий строки сценария (src = ''http: // localhost: 8080/socket.io/socket.io.js'') на (src = ''/ socket.io/socket.io.js''), и теперь я получаю: Uncaught ReferenceError: require не определен – BHendricks

+0

Спасибо! Это отлично работает. Если вы также минимизируете/уклоняете JS на стороне клиента, это дает возможность отказаться от этого. Очень признателен. – arcseldon