Узел использует socket.io с ejs и роутером - PullRequest
0 голосов
/ 30 октября 2019

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

app.js

const express = require('express');
const app = express();
const router = express.Router();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.set('socketio', io);
const expressLayouts = require('express-ejs-layouts');

module.exports = router;

app.use(express.static(__dirname));
app.use(express.urlencoded({ extended: true }));

app.use(expressLayouts);
app.set('view engine', 'ejs');

app.use(function(req, res, next) {
    next();
});

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

app.use('/', require('./routes/test.js'));

const PORT = process.env.PORT || 8081;

app.listen(PORT, console.log(`Server started on port ${PORT}`));

Внутри файла маршрута я открываю страницу

test.js

const express = require('express');
const router = express.Router();


// Dashboard
router.get('/start', (req, res, next) => {

    res.render('index2', {
        caseArray: 'eins'
    });


});


module.exports = router;

И, наконец, внутри шаблона, который я добавил:

    <script
        src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"
     ></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>var socket = io();</script>

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

GET http://localhost:8081/socket.io/socket.io.js net::ERR_ABORTED 404 (Not Found)
(index):24 Uncaught ReferenceError: io is not defined
    at (index):24

Как я понимаю из всего урока, этот узел отправит socket.io в запросе на html-страницу, а с html-страницей сервер подключается. Но нет сообщения о соединении, потому что файлы не существуют. Где моя проблема? В клиенте или на сервере?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Для всех с похожей проблемой. Я решил это, используя

server.listen(PORT, console.log(`Server started on port ${PORT}`));

вместо

app.listen(PORT, console.log(`Server started on port ${PORT}`));
0 голосов
/ 31 октября 2019

Кажется, что узел пытается найти js-файлы socket.io на вашем сервере по маршруту /socket/socket.io.js, который, я полагаю, вы не определили

Я бы предложил вам использовать ссылку cdn Socket io и разместить еемежду вашими тегами html header

<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js'></script>
...