首页 > 解决方案 > 如何设置 Socket.io 以使用 Express NodeJS 监听单独的页面

问题描述

我有下一个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}`);
});

我从这个结构中得到了什么?我的听都是通过andserver进入网站的,这是错误的。所以,我认为我需要实现我的部分代码来响应处理特定路线中的事件......localhost:3000localhost:3000/chatsockets.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;

在我的情况下,如何仅在/chat没有全局调用文件的页面上实现 sockets.io socket.io libraryserver或者这是不可能的?我需要任何帮助...

谢谢!

标签: node.jssocketsexpresssocket.io

解决方案


问题是您必须将HTTP连接升级为websocket连接,所以您仍然需要在主页面上使用socket.io ...


推荐阅读