1

我一直在努力寻找以下代码中的错误来源:

const express = require("express");
const path = require("path");
const WebSocket = require("ws");
const SocketServer = WebSocket.Server;

const PORT = process.env.PORT || 3000; // port to listen on

const INDEX = path.join(__dirname, "index.html"); // index address

var server = express();

server.use((req, res) => res.sendFile(INDEX));
server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));

const wss = new SocketServer({server}); // wss = web socket server

(我在下面有用于连接等的代码,这与我认为的这个问题无关)

运行此程序后,我在浏览器中收到来自客户端的以下错误:

与“ws://localhost:3000/”的 WebSocket 连接失败:在收到握手响应之前连接已关闭

令我困惑的是,如果我进行以下更改,代码就可以工作:

var server = express()
    .use((req, res) => res.sendFile(INDEX));
    .listen(PORT, () => console.log(`Listening on port ${ PORT }`));

这种方法的问题是在现有的.use之前添加另一个.use不起作用,这是访问静态文件所必需的(即javascript作为它自己的文件而不是在HTML文件中)

为什么在这两个示例之间更改我的代码会破坏它?我能做些什么来解决这个问题?

谢谢

4

2 回答 2

1

您需要将http.createServer实例传递给WebsocketServer. 不是express实例

var app = express();
var server = http.createServer(app);
于 2019-06-20T12:38:41.027 回答
0

我找到了解决办法!

事实证明,当调用 .use 和 .listen 时,您必须设置服务器变量的值。

var server = express();

server = server.use((req, res) => res.sendFile(INDEX));
server = server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));

代替

var server = express();
server.use((req, res) => res.sendFile(INDEX));
server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
于 2019-06-20T13:31:28.003 回答