express-ws: "ws.send не является функцией" - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю приложение, используя Node.js + Express + Express-ws, но при попытке отправить сообщение после подключения я получаю следующую ошибку:

const fs        = require('fs');
const http      = require('http');
const https     = require('https');
const express   = require('express');
const app       = express();

/*
const key   = fs.readFileSync('./security/server-key.pem', 'utf8');
const cert  = fs.readFileSync('./security/server-crt.pem', 'utf8'); 
const ca    = fs.readFileSync('./security/ca-crt.pem', 'utf8');
const credentials = {key: key, cert: cert, ca: ca};
var httpsServer = https.createServer(credentials, app);
*/

var httpServer = http.createServer(app);

httpServer.listen(8443, function(){
    console.log('Listening on *:8443 \n');
});

httpServer.on('connection', function(ws) {
    ws.on('message', function(message) {
        console.log('received: ' + message);
        ws.send(message);
    });
    ws.send('Hi there, I am a WebSocket server');
});

//ROUTES
app.get('/charger/:id', function(req, res){
    res.send('<h1>Hello ' + req.params.id + '</h1>');
});

app.get('*', function(req, res){
    res.status(404).send('404 — Not Found');
});

Комментарийчтобы убедиться, что я могу использовать позже HTPPS без слишком большого количества изменений.

Ошибка следующая:

TypeError: ws.send is not a function
    at Server.<anonymous> (index.js:26:5)
    at Server.emit (events.js:194:15)
    at TCP.onconnection (net.js:1517:8)

1 Ответ

0 голосов
/ 20 февраля 2019

Насколько я могу судить, это потому, что вы на самом деле нигде не используете пакет express-ws.Кроме того, объект httpServer является экземпляром класса http.Server и не имеет встроенных знаний о веб-сокетах.Даже если вы вызываете аргумент в обратном вызове ws, на самом деле это не объект веб-сокета - это экземпляр класса http.ClientRequest, у которого нет метода send, следовательно, ws.send is not a functionошибка.Итак, чтобы решить эту проблему, я думаю, вам нужно будет сделать что-то в этом духе, для документов :

const express = require('express');
const app = express();
const expressWs = require('express-ws')(app);

app.ws('/', function(ws, req) {
  // Now you have a ws object available
})

Надеюсь, что это помогает, удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...