使用 express 和 socket.io 的简单节点客户端服务器通信不起作用

时间:2021-06-06 20:56:40

标签: javascript html node.js express socket.io

我正在尝试编写一个简单的客户端服务器应用程序。

这就是 HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
    <script src="client.js"></script>
</body>

</html>

server.js 文件:

const express = require('express');
const app = express();
const port = 3000;
const server = app.listen(port);
const io = require('socket.io')(server);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

io.on('connection', (socket) => {
    console.log('a user connected');
});

client.js 文件:

const socket = io('https://localhost:3000/');

此时,如果我通过在终端上键入 node server 来启动服务器,并使用 LiveServer vs 扩展程序打开 HTML 文件,则控制台不会显示文本 a user连接,它也会返回一个错误:

<块引用>

获取 https://localhost:3000/socket.io/?EIO=4&transport=polling&t=NdZ4wOd net::ERR_SSL_PROTOCOL_ERROR

我不知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

在 client.js 文件中,您可以尝试 const socket = io.connect();,我不确定,但我认为 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script> 应该在标题中,但我可能错了。

答案 1 :(得分:0)

**在您的服务器文件中进行更改 **

const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(cors());
const server = app.listen(port);
const io = require('socket.io')(server);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

io.on('connection', (socket) => {
    console.log('a user connected');
});

在使用 npm i cors

启动服务器之前安装 cors npm 包