Сервер отвечает 404 при попытке подключить Socket.io к приложению Express

Я создаю приложение VueJS, используя шаблон веб-пакета vue-cli. Я разделил переднюю и заднюю части на разные приложения Heroku и развернул их.

Задний план: Мое клиентское приложение настроено так же, как описано здесь

tl; dr в указанной выше статье на Medium: Теперь у нас есть новое приложение Vue-cli / webpack и файл server.js, используемый для создания сервера Express, который обслуживает файлы созданного приложения.

Проблема: У меня возникли проблемы при попытке использовать socket.io в указанном файле server.js.

Вот как выглядит server.js:

var http = require('http'),
        path = require('path'),
        express = require('express'),
        app = express(),
        server = http.createServer(app),
        socketIO = require('socket.io'),
        port = process.env.PORT || 8080,
        history = require('connect-history-api-fallback'),
        serveStatic = require('serve-static')


app.use(serveStatic(path.join(__dirname, '/dist')))

server.listen(port, () => {
    // logs when running node server.js
    console.info('listening on port', port)
})

const io = socketIO(server);

io.on('connection', (socket) => {
  console.info('Connected!!!');
});

И вот как я вызываю socket.io внутри моего компонента .vue:

const io = require('socket.io-client')
const socket = io('http://localhost:8080')

Как только эта последняя строка будет раскомментирована, я получаю дружелюбный Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/socket.io/?EIO=3&transport=polling&t=M9yJX8nsocket.io/?EIO=3&transport=polling&t=M9yHe0F

Дополнительная информация:

Не уверен, актуально ли это, но все же говорю - я использую "connect-history-api-fallback", чтобы указать все несуществующие маршруты на компонент 404 .vue с подстановочными знаками, который отображает удобное сообщение пользователя и позволяет им вернуться к существующим маршрутам. . Может ли это быть частью причины? Что я прочитал о своей проблеме, так это то, что у меня, вероятно, проблемы с запуском socket.io на том же сервере, на котором работает мое приложение.

Первоначально у меня возникла проблема при попытке сначала подключить мое приложение Vue с Vue-Socket.io

на линии

Vue.use(VueSocketio, socketio('http://socketserver.com:1923'));

Где в качестве URL я использовал http://localhost:8080

Я потратил несколько дней на решение проблемы, но до сих пор не могу понять, в чем корень проблемы. Я действительно пытаюсь понять и буду очень признателен за любую форму обратной связи. Я читал о людях, имеющих такую ​​же / похожую проблему, и пытался вызвать в io() без моего адреса localhost + port.

Первый вопрос здесь, надеюсь, он правильно задан.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
438
1

Ответы 1

Хорошо, ребята, я не знаю почему, но следование коду, помещенному в раздел «Документы» на сайте Socket IO, привело к той же ошибке (раздел Express 3/4). Затем я скопировал демонстрацию чата и имел успех, поэтому сейчас я импортирую Socket.IO в свой файл Index.html.

<script src = "/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>

server.js выглядит так:

var path = require('path'),
    app = require('express')(),
    http = require('http').Server(app),
    io = require('socket.io')(http),
    port = process.env.PORT || 8080,
    history = require('connect-history-api-fallback'),
    serveStatic = require('serve-static')

app.use(serveStatic(path.join(__dirname, '/dist')))

http.listen(port, () => {
    console.info('listening on port', port)
})

io.on('connection', (socket) => {
  console.info('Connected!!!');
});

Я собираюсь закрыть это сейчас и посмотреть, как реализовать функциональность, которую я ищу - теперь у меня есть хорошая отправная точка. Удачи всем, кто борется с этим. Ваше здоровье!

Другие вопросы по теме