Socket.io реагирует на героку 405

У меня есть следующий файл сервера:

const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = module.exports.io = require('socket.io')(server)

const PORT = process.env.PORT || 3231

const SocketManager = require('./SocketManager')

app.use(express.static(__dirname + '/../../build'))

io.on('connection', SocketManager)

server.listen(PORT, ()=>{
	console.info("Connected to port:" + PORT);
})

И я подключаю его на переднем конце следующим образом:

import React, { Component } from 'react';
import io from 'socket.io-client';
import Game from '../Game/Game';
import axios from 'axios'

const socketUrl = "/"

const socket = io(socketUrl)

Но я продолжаю получать это в своей консоли:

Не удалось загрузить ресурс: сервер ответил со статусом 405 (не разрешено)

Я действительно не уверен, что нужно изменить или настроить, чтобы исправить ошибку.

Ваш внешний интерфейс размещен на том же внутреннем сервере (серверном файле), где у вас есть сервер сокетов?

ShocKwav3_ 13.02.2019 08:49

и разбить эту строку и экспортировать отдельно const io = module.exports.io = require('socket.io')(server)

ShocKwav3_ 13.02.2019 08:51

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

Steve Snyder 13.02.2019 19:12

Я хотел спросить, размещаете ли вы свой интерфейс на том же сервере, на котором работает сокет?

ShocKwav3_ 13.02.2019 19:54

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

Steve Snyder 13.02.2019 22:36

Это работает на вашей локальной установке? и под размещением в той же настройке я не имел в виду онлайн-хостинг, я имею в виду, как вы используете свой интерфейсный код? Используете ли вы веб-пакет/другие инструменты для его запуска? или вы обслуживаете html-файл, в который включен bundle.js, на том же сервере узла, на котором вы используете сокет?

ShocKwav3_ 14.02.2019 08:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
6
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Моя настройка не подходила для людей, у которых возникли проблемы с подключением socketio к их бэкэнду из реагирующего интерфейса. Это сработало для меня:

const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = module.exports.io = require('socket.io')(server, { origins: '*:*'})
const path = require('path')

// for prod dont use port #
const PORT = process.env.PORT || 3001

const SocketManager = require('./socketmanager')

app.use(express.static(path.join(__dirname, 'build')));

app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
  });

io.on('connection', SocketManager)

server.listen(PORT, ()=>{
    console.info("Connected to port:" + PORT);
})

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