Инициализация сервера с помощью экспресс - PullRequest
0 голосов
/ 20 июня 2019

Я пытался найти источник ошибки в следующем коде:

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

(у меня есть код ниже для подключения и т. Д., Который, я думаю, не имеет отношения к этому вопросу)

После этого я получаю следующую ошибку от клиента в браузере:

Сбой подключения WebSocket к 'ws: // localhost: 3000 /': Соединение закрыто до получения ответа на рукопожатие

Что меня смущает, так это то, что код работает, если я сделаю следующее изменение:

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

Проблема этого метода в том, что он не работает для добавления в другой .use до существующего .use,что необходимо для доступа к статическим файлам (т. е. javascript как его собственный файл, а не как файл HTML)

Почему изменение моего кода между этими двумя примерами нарушает его?Что я могу сделать, чтобы решить эту проблему?

Спасибо

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вам необходимо передать экземпляр http.createServer в WebsocketServer.Не express экземпляр

var app = express();
var server = http.createServer(app);
0 голосов
/ 20 июня 2019

Я нашел решение!

Оказывается, вы должны установить значение серверной переменной при вызове .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 }`));
...