Сбой подключения WebSocket к ‘ws: // localhost: 5000 / socket.io / …’: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 400

#node.js #mongodb #sockets #socket.io #react-functional-component

#node.js #mongodb #сокеты #socket.io #реагирующий функциональный компонент

Вопрос:

Я пытаюсь создать приложение для чата, которое использует базу данных реального времени с MongoDB и Websocket. Это мой первый проект React, MongoDB и Websocket, поэтому, пожалуйста, извините за возможные мелочи. : D

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

Создание и сохранение нового пользователя работает нормально, а также регистрация данных нового пользователя в режиме реального времени после изменения базы данных (через socket.io) также работает. Теперь я хотел бы получить доступ к информации, измененной базой данных во интерфейсе моего приложения, чтобы я мог обновить неупорядоченный список пользователей.
Теперь есть проблема, которую я хотел бы решить:
я пытаюсь подключить интерфейс к своему бэкэнду, используя этот код:

 //...

import socketIOClient from "socket.io-client";
const ENDPOINT = "localhost:5000";

const MainContentArea = () => {

   useEffect(()=>{
       const socket = socketIOClient(ENDPOINT);
       socket.on("changes", data => {
           console.log(data);
       })
   });

//...
  

Ниже приведен мой внутренний код:

 const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const index = require('./routes/index');
const port = process.env.PORT || 5000;
const app = express();
app.use(index);

const server = app.listen(port, () => {
    console.log(`Server ist running on port: ${port}`);
})
const io = socketIo(server).listen(server);

const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config({
    path: './.env'
});

const Users = require('./models/user.model');

app.use(cors());
app.use(express.json());

const usersRouter = require('./routes/users');

app.use('/users', usersRouter);

const uri = process.env.ATLAS_URI;
mongoose.connect(uri, {
    
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true

}, 

function(err){
    if(err){
        console.log("server.js err line 44");
        throw err;
    }

    io.on('connection', (socket) => {
        console.log('user connected');
        socket.on('disconnect', (socket) => {
            console.log('user disconnected');
        })
    })
    Users.watch().on('change', (change) => {
        console.log('socket says: something changed in db');
        console.log('change: ', change.fullDocument);
        io.to(change.fullDocument).emit('changes',change.fullDocument)
    })
}
);

const connection = mongoose.connection;
connection.once('open', () => {
    console.log("MongoDB database connection established successfully");
})
  

Я продолжаю получать сообщение об ошибке:
WebSocket connection to 'ws://localhost:5000/socket.io/? EIO=3amp;transport=websocketamp;sid=33wU6D8PnqclT3iZAAAB' failed: Error during WebSocket handshake: Unexpected response code: 400

Я использую Chrome и работаю на macOS.
Я очень благодарен за любые предложения, которые могут помочь решить мою проблему.

Я надеюсь, что то, как я разместил свой вопрос, полезно для всех, кто готов помочь мне в этом. Если нет, не стесняйтесь давать мне предложения о том, что делать лучше в следующий раз! Это мой первый пост здесь.