首页 > 解决方案 > Node.JS 服务器中的 Socket.IO 没有响应

问题描述

伙计们,过去几天我一直在努力,从这个 socket.io 设置。我认为我的代码应该没有错误。我已经关注了所有关于如何使用 node 和 express 为 socket.io 设置服务器的教程和文档。但是当我尝试连接到这个时,socket.io 仍然没有响应。在我的客户端,我尝试连接与运行 http://localhost:8090 (FIXED) 的服务器相同的 url

所以一切都设置好了!它不起作用的是bcs我没有在服务器端的套接字实例上设置CORS(参见我编辑的代码)。仅供参考,因为Socket.IO v3你需要通过定义哪个url来包含cors属性将连接到你的插座。

服务器代码:

const express = require ('express');
const bodyParser = require('body-parser');
const cookieParser =  require('cookie-parser');
const db = require("./Connection/pg_pool");
const authentication = require("./Config/auth");
const connectionError = require("./Config/connectionError");
const cors = require('cors');
let port = 8090;
let hostname = 'localhost';
const midtransClient = require('midtrans-client');
const paymentConf = require('./Config/payment');
const { encode } = require('node-encoder');
const axios = require('axios');

let payment =  paymentConf.paymentConf;
let errorMsg = connectionError.connectionError();
let auth = authentication.auth;

const app = express();

const server = require("http").createServer(app);
const io = require('socket.io')(server)
io.on("connection", socket => {
    console.log('NEW USER CONNECTED')
});

app.use(express.json());
app.use(cors({origin: true, credentials: true}));
app.use(express.urlencoded({extended: true}));
app.use(cookieParser());

server.listen(process.env.PORT || port, hostname, () => {    
    console.log(`Listening to ${hostname}:${port}`)
})

客户代码:

import React, {useState, useEffect, useRef, useCallback, useMemo} from 'react';
import { io } from "socket.io-client";

const ENDPOINT = "http://localhost:8090";
let socket;

export default function Chat(props) {

  const [text, setText] = useState('')
  const [req, setReq] = useState([]);
  const [messages, setMessages] = useState([]);
  const [send, setSend] = useState(false);
  

  useEffect(() => {
    socket = io(ENDPOINT);
    console.log('ini socker', socket.connected)
    socket.on("connect", (data) => {
      console.log(data)
    });    
  }, []);
....

固定代码

/*since my frontend (client-side) was running on localhost:3000,
all u need to do is just define the cors and put the origin url that 
u gonna connect to ur socket instance on Node.Js (server) like this.*/

const io = require('socket.io')(server, {
    cors: {
      origin: [`http://localhost:3000`],
      credentials: true
    }
})

标签: node.jsreactjsexpresssocket.io

解决方案


推荐阅读