сервер socket.io - явная ошибка в журнале "в приложении не определены маршруты" - PullRequest
0 голосов
/ 06 декабря 2018

Я настраиваю чат-сервер с socket.io.Я следовал их руководству, пока не пришло SSL.Я нашел некоторые объяснения здесь по стеку и учебные пособия в сети, поэтому я придумал следующий код.

Я заменил свой реальный домен на «my-domain.de»

var app = require('express')();
var fs = require('fs');
var https = require('https');
var io = require('socket.io')(https);
var mysql = require('mysql');

var options = {
    key: fs.readFileSync('/etc/letsencrypt/live/my-domain.de/privkey.pem'),
    cert: fs.readFileSync('/etc/letsencrypt/live/my-domain.de/cert.pem'),
    ca: fs.readFileSync('/etc/letsencrypt/live/my-domain.de/chain.pem')
};

var serverPort = 8443;
var server = https.createServer(options, app);

server.listen(serverPort, function(){
    console.log('listening on *:' + serverPort);
});


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

});

Сервер работает, но Клиент не получает socket.io.js.Поэтому я запустил сервер с DEBUG = * -node index.js, чтобы увидеть, что происходит.При попытке подключения клиент отображает следующую ошибку:

express:application no routes defined on app +9s
finalhandler default 404 +0ms

Клиент выглядит следующим образом:

<script src="https://my-domain.de:8443/socket.io/socket.io.js"></script>
<script>
    $(function () {
        var socket = io('https://my-domain.de:8443/');
</script>

1 Ответ

0 голосов
/ 06 декабря 2018

После нескольких часов головной боли я нашел решение, и оно так же просто, как всегда ...

Мне просто нужно было поставить var io = require('socket.io')(server); после var server = https.createServer(options, app);, чтобы он мог правильно маршрутизировать ...

Так что мой окончательный код сервера выглядит так:

var app = require('express')();
var fs = require('fs');
var https = require('https');
var mysql = require('mysql');

var options = {
    key: fs.readFileSync('/etc/letsencrypt/live/my-domain.de/privkey.pem'),
    cert: fs.readFileSync('/etc/letsencrypt/live/my-domain.de/cert.pem'),
    ca: fs.readFileSync('/etc/letsencrypt/live/my-domain.de/chain.pem')
};

var serverPort = 8443;
var server = https.createServer(options, app);
var io = require('socket.io')(server); // HERE TO PUT THE DAMN SOCKET.IO!!

server.listen(serverPort, function(){
    console.log('listening on *:' + serverPort);
});


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

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