У меня есть проект, написанный на Express, где я создал систему обмена сообщениями. Все работало по методам POST / GET (для отправки и получения сообщений). Я хотел, чтобы они отображались в реальном времени, поэтому я установил socket.io
как на стороне клиента, так и на стороне сервера. В моем server.js
я добавил эти строки:
const http = require("http");
const io = require("socket.io");
const server = http.createServer();
const socket = io.listen(server);
и изменил мой app.listen(...)
на server.listen(...)
. Добавлено также:
socket.on("connection", socket => {
console.log("New client connected");
socket.on('test', (test) => {
console.log('test-test')
});
socket.emit('hello', {hello:'hello!'});
socket.on("disconnect", () => console.log("Client disconnected"));
});
На лицевой части я поместил такой код в методе componentDidMount
:
const socket = socketIOClient();
socket.emit('test', {test:'test!'})
socket.on('hello', () => {
console.log('aaa')
})
Теперь у меня 2 проблемы. Хотя console.log () работает правильно, я получаю сообщение об ошибке в приложении React:
WebSocket connection to 'ws://localhost:3000/sockjs-node/039/lmrt05dl/websocket' failed: WebSocket is closed before the connection is established.
Это нормально?
Кроме того, когда я изменяю app.listen(...)
на server.listen(...)
в файле server.js
моя маршрутизация перестает работать. Все методы POST и GET не работают, потому что сервер отвечает бесконечно. Можно ли использовать socket.io только для определенного метода в определенном файле маршрутизации?
Я сохраняю свои маршруты таким образом: app.use('/api/user', user);
, где user - файл маршрутизатора.
UPDATE: full server.js требует:
const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const bodyparser = require('body-parser');
const passport = require('passport');
const user = require('./routes/api/v1/User');
const company = require('./routes/api/v1/Company');
const http = require("http");
const io = require("socket.io");
const app = express();
dotenv.config();
app.use(passport.initialize());
require('./config/seed');
require('./config/passport')(passport);
const server = http.createServer();
const socket = io.listen(server);