如何让socket.io与ES6导入模块一起工作



我将socket.io的一个简单示例从CommonJSrequire语法重构为ES6import语法,但当我启动服务器并转到网站时,尽管它显示了HTML文本("来自server.js的测试"(,但它并没有通知服务器它已连接。

然而,控制台中根本没有错误,只是表现得好像socket.io根本没有加载一样。

在我的package.json文件中,我有以下条目,以便ES6模块在Node中工作:

"type": "module",

为什么socket.io不工作?

server.js

import path from 'path';
import http from 'http';
import express from 'express';
import { Server as socketIO } from 'socket.io';
const app = express();
const PORT = 5011;
const __dirname = path.resolve(path.dirname(''));
const server = http.Server(app);
const io = new socketIO(server);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/public/index.html');
});
io.on('connection', (socket) => {
console.log('user connected');
socket.emit('greeting-from-server', {
greeting: 'you loaded the page'
});
})
app.listen(PORT, () => {
console.log(`listening on port http://localhost:${PORT}`);
});

/public/index.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>Socket.IO</title>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io('http://localhost:5011');
socket.on('greeting-from-server', (data) => {
console.log(data);
socket.emit('greeting-from-client', {
greeting: 'Hello Server'
});
});
</script>
</head>
<body>
test from server.js
</body>
</html>
import { createServer } from "http";
import { Server } from "socket.io";
const httpServer = createServer();
const io = new Server(httpServer, {
// ...
});
io.on("connection", (socket) => {
// ...
});enter code here
httpServer.listen(3000);

最新更新