Передача событий socket.io от express роутера и обработка на сервере - PullRequest
1 голос
/ 13 февраля 2020

Я пытаюсь создать приложение для веб-чата, используя node.js и express. У меня есть файл маршрутизатора и файл сервера, а также некоторые файлы клиента. Я хотел бы отправить событие соединения с маршрутизатора и обработать его на сервере, чтобы пользователь мог присоединиться к комнате. Мне это нравится

Сервер. js

const express = require('express');
const layout = require('express-layout');
const app = express();
var server = require('http').createServer(app);
var io=require('socket.io')(server);
const routes = require('./router')(io);
const bodyParser = require('body-parser');
var fs = require("fs");



app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

const middleware = [
    layout(),
    express.static(path.join(__dirname, 'public')),
    bodyParser.urlencoded(),

];

app.use(middleware);

app.use('/', routes);

app.use((req, res, next) => {
    res.status(404).send("Sorry can't find that!");
});

app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});



io.on('connect', onConnect);

function onConnect(socket) {
    var contents = fs.readFileSync("./public/rooms.json");
    let rooms = JSON.parse(contents);
    socket.emit('parse',rooms);
    socket.on('join',function (name, room) {
        console.log(name+" "+ room);
        socket.join(room);
        socket.user=name;
        socket.room=room;
    })
}

Здесь я просто инициализирую соединение io вместе со всеми зависимостями, которые я использую. Я использую const routes = require('./router')(io); для передачи переменной io

router. js

    const express = require('express');
    const User= require("./public/classes/User");
    const router = express.Router();
    const {check, validationResult} = require('express-validator');
    const {matchedData} = require('express-validator/filter');

    var userlist=new Array();


    router.get('/', (req, res) => {
        res.render('index', {
            data: {},
            errors: {}
        })
    });

    router.post('/enter', [
        check('username')
            .isLength({min: 1})
            .withMessage('Username is required').trim()   //implement personalized check
    ], (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.render('index', {
                data: req.body,
                errors: errors.mapped()
            })
        }
        const data = matchedData(req)
        handleJoin(data);
    });
    return router;





    //MOVE TO SUPPORT
    function find(name) {
        return 1;
    }

    function handleJoin (data){
        if(find(data.username)){
            const newUser= new User (data.username, data.room,"");
            userlist.push(newUser);
            io.emit('join',newUser.name,newUser.room);
        }
    };
};

Консоль должна регистрировать имя и выбранную комнату, но она не ' т. Как мне это обработать?

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