node.js - 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
}
})
解决方案
推荐阅读
- javascript - 如何更改状态以响应表单
- r - 使用关键字过滤文本/推文列
- julia - 无法弄清楚 Cumulants.jl 的简单用法
- javascript - 无法同时设置画布宽度和更改字体?
- java - 如何在 AndroidStudio [Java] 中创建自定义“下拉”菜单
- python-3.x - 目录到变量
- c++ - 模板 b-tree c++ 实现
- python - 如何在 Streamlit 应用程序的 python 文件中设置和访问环境变量?
- apache-spark - Apache Spark Word2Vec 抛出 org.apache.spark.shuffle.FetchFailedException:要求失败
- macos - 使用 Mac OS 开发时极度滞后