У меня есть следующая server.js
структура файла, где у меня две страницы, и только для последней /chat
страницы мне нужно реализовать прослушиватель событий с помощью библиотеки Socket.io:
'use strict'
const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const index = require('./routes/index');
const chat = require('./routes/chat');
app.use('/', index);
app.use('/chat', chat);
// sockets.io code part start...
app.use((req, res, next) => {
res.locals['socketio'] = io;
next();
});
// sockets.io code part finish...
const port = process.env.API_PORT || 8989;
server.listen(port, () => {
console.log(`Server running on port ${port}`);
});
Что яполучить эту структуру?Мой server
прослушивает все, что входит на сайт по localhost:3000
и localhost:3000/chat
, это неправильно.Итак, я думаю, что мне нужно реализовать свою часть кода, которая отвечает за обработку sockets.io
событий по определенному маршруту /chat
...
У меня был следующий файл chat.js
в моей системе маршрутов:
const express = require('express');
const router = express.Router();
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
router.route('/chat')
.get((req, res) => {
let messages = [];
let userCounter = 0;
let users = [];
const io = res.locals['socketio'];
io.on('connect', (socket) => {
console.log('Connection established!');
socket.on('new user', (message) => {
userCounter++;
users.push(userCounter)
console.log('New user is in! Count of users online:', users)
});
socket.emit('new connect', messages);
socket.on('message data', (message) => {
console.log(message);
messages.push(message);
io.emit('New message:', message);
});
});
res.json('Hello on the Chatpage!');
});
module.exports = router;
Как я могу реализовать sockets.io в моем случае только для /chat
страницы без глобального вызова socket.io library
в server
файле или это невозможно?Мне нужна помощь ...
Спасибо!