【问题标题】:socket.io react heroku 405socket.io 反应 heroku 405
【发布时间】:2019-02-13 02:37:20
【问题描述】:

我有以下服务器文件:

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.log("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(不允许)

我真的不确定要更改或设置什么来纠正错误。

【问题讨论】:

  • 您的前端,是否托管在您拥有套接字服务器的同一后端(服务器文件)上?
  • 并将此行分解并单独导出const io = module.exports.io = require('socket.io')(server)
  • 它们是单独的文件,不是同一个文件,我认为这与发生 405 错误的原因没有任何关系,只是您希望它根据自己的最佳显示方式实践
  • 我的意思是问您是否将前端托管在运行套接字的同一后端上?
  • 如果有帮助,我将托管在 heroku 上,如果这可能会导致某些问题,我也会使用 Auth0 进行身份验证登录,但我不相信它是

标签: reactjs express heroku socket.io


【解决方案1】:

我的设置不适合那些从 react 前端与他们的后端连接 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.log("Connected to port:" + PORT);
})

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 2020-03-15
    • 1970-01-01
    • 2013-03-16
    • 2021-04-29
    • 2018-01-25
    • 2017-06-17
    • 2014-06-27
    • 2022-01-25
    相关资源
    最近更新 更多