Странная ошибка socket.io - PullRequest
       4

Странная ошибка socket.io

0 голосов
/ 23 февраля 2019

Итак, я собирался создать приложение чата реагирования / узла на основе веб-сокетов, используя socket.io.В то время как я работал, я начал испытывать очень странную ошибку, короче говоря, когда я пытаюсь передать событие «message» с сервера переднего плана на сервер внутреннего узла, оно работает НО только первые 6 раз.Я пытался многократно реорганизовать код, изменить различные конфиги и пресеты для socket.io, но в конце эта проблема осталась прежней.Вот фактический код:

Если кто-то сталкивался с подобными ошибками, подобными этой, и нашел решение, я был бы очень рад его услышать, потому что я потратил большое количество времени на просмотр переполнения стека и потоков на других форумах, которые посвященыsocket.io

Реагирует:

import React, { Component } from 'react';
import classes from './Chat.module.scss';
import axios from 'axios';
import openSocket from 'socket.io-client';
class Chat extends Component {
state = {
messages: [],
message: ''
};
componentDidMount() {
const io = openSocket('http://localhost:8080');
io.on('message', data => {
console.log(data);
});
}
messageChanged = e => {
this.setState({ message: e.target.value });
};
messageSent = () => {
axios.post('http://localhost:8080/message', {
message: this.state.message
});
};
render() {
return (
<div className={classes.wrapper}>
<p>Hello</p>
<div />
<input
type="text"
onChange={this.messageChanged}
value={this.state.message}
/>
<button onClick={this.messageSent}>Send</button>
</div>
);
}
}

export default Chat;

файл корневого узла:

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const filemanagerMiddleware = require('@opuscapita/filemanager-server')
.middleware;
const cors = require('cors');
const path = require('path');
const socketIo = require('socket.io');
const config = {
fsRoot: path.join(__dirname, 'public', 'files'),
rootName: 'root',
logger: {
log: () => {},
info: () => {},
warn: () => {},
error: () => {}
}
};
const router = require('./router');
const app = express();
app.use(cors());
app.use(bodyParser.json());
const port = process.env.PORT || 8080;
const server = app.listen(port);
const io = socketIo.listen(server);
app.use((req, res, next) => {
req.io = io;
next();
});
app.use('/', router);
io.sockets.on('connection', socket => {
console.log('User connected');
});
io.sockets.on('message', data => {
console.log(data);
});
app.use('/filemanager', filemanagerMiddleware(config));
(async () => {
await mongoose.connect('mongodb://localhost:27017/practice-app', {
useNewUrlParser: true
});
console.log(\Connected to DB and listening on ${port}...`);})();

Разделенный файл маршрутизатора, объединяющий все контроллеры:

const chatController = require('./controllers/chat');

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

router.post('/signup', authenticationController.signup);
router.post('/signin', authenticationController.signin);

// this is the route for posting data which is then emitted through websocket
router.post('/message', chatController.sendMessage);

module.exports = router;

Отдельный файл контроллера чата:

exports.sendMessage = (req, res) => {
const { message } = req.body;
req.io.sockets.emit('message', { message });
};

Обратите внимание, что req.io является экземпляром сервера socket.io, проходящего через промежуточное ПО

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