2017-02-19 5 views
4

Я прочитал все другие сообщения по этой теме, но я не могу найти ответ для своей проблемы. У меня есть Экспресс-сервер, работающий по умолчанию или 5000 (process.env.PORT || 5000). Затем я добавил socket.io, но клиентская сторона не может найти файл socket.io.js. После некоторых тестов я предполагаю, что есть проблема с некоторыми конфликтами портов или чем-то еще. Вот мой код на стороне сервера:Клиентская сторона не может найти socket.io.js

var express = require('express'), 
    app = express(), 
    bodyParser = require('body-parser'), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 

    app.set('port', (process.env.PORT || 5000)); 

Edit: Клиентский материал: enter image description here

Edit 2: Кроме того, я не думаю, что это важно, но я проверяю это на Heroku местном.

Редактировать 3: Структура каталогов:

--api 
--images 
--node_modules 
--scripts 
--pages 
    main_page.ejs 
--styles 
composer 
index.js 
npm-debug 
package 

Редактировать 4: Bump

+1

что вы думаете о «клиентской стороне», код браузера? –

+1

Хотите добавить код на стороне клиента? каков маршрут, который принимают пакеты? правильно ли настроены ваши брандмауэры? –

+0

Я отредактировал мой вопрос и добавил скриншот клиентского кода/проблемы. – someRandomSerbianGuy

ответ

2

Проблема

Socket.IO не в состоянии перехватить запросы /socket.io/, которые загружаются socket.io.js. Это означает, что файл virtual socket.io.js никогда не загружается, и вы получаете вышеупомянутую ошибку 404.

Решение

Изменить это:

app.set('port', (process.env.PORT || 5000)); 
app.listen(app.get('port', function() { ... }); 

Для этого:

app.set('port', (process.env.PORT || 5000)); 
server.listen(app.get('port'), function() { ... }); 

Это предотвращает экспресс от немедленного перехвата запросов к /socket.io/ и позволяет файл для загрузки.

+0

Благодарим вас за ответ. У меня есть вопрос об этом методе. Я использую метод app.listen (app.get ('port'), function() {, чтобы сообщить приложению о том, какой порт прослушивать, но с вашим ответом я не могу использовать порт app.get, потому что я его не настроил. является правильной процедурой для этого? – someRandomSerbianGuy

+0

Вот что вы будете делать: оставьте 'app.set()', как показано в приведенном выше коде. Затем вместо использования 'app.listen()' use 'server.listen()' Я обновлю свой ответ, чтобы показать это. –

Смежные вопросы