У меня есть компонент, который при монтировании делает запрос на мой сервер, чтобы получить (очень длинный) список имен.Чтобы это не задерживало рендеринг моего компонента (поскольку он может рендериться только с непустым списком), я хочу отправить ему серию гораздо меньших списков с использованием сокетов вместо одного длинного списка с * 1001.* (это занимает ~ 4 секунды).
Для этого я использую socket.io на своем экспресс-сервере, но получаю 404 ошибки.Это мои настройки:
Клиент (компонент)
import socketIOClient from 'socket.io-client';
componentDidMount() {
console.log('trying to put on sock');
const socket = socketIOClient();
socket.on('names', data => console.log('data'));
}
Родитель этого компонента - тот, который вызывает маршрут api/v1/names
.
Сервер
const express = require('express');
const socketIo = require('socket.io');
const http = require('http');
const app = express();
app.use(express.static(path.resolve(__dirname, '../build')));
const server = http.createServer(app);
const io = socketIo(server);
app.get('/api/v1/names', (req, res) => {
res.set('Content-Type', 'application/json');
getNames().then((result) => {
// res.send({ result }); what I was doing before (~4 seconds)
io.on('connection', (socket) => {
console.log('New client connected');
// chunk the results into 10 smaller arrays
let final = false;
const parts = _.chunk(result, 10);
parts.forEach((part, pIx) => {
if (pIx === parts.length - 1) final = true;
// Will this be async or not? we shall see...
socket.emit('names', { result: part, final });
});
socket.on('disconnect', () => {
console.log('Client disconnected');
});
});
});
});
В итоге вместо этого возникает ошибка в моей консоли: GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=123kj123b 404 (Not Found)
.Логи в io.on('connection')
никогда не бывают.Журнал trying to put on sock
виден, поэтому я знаю, что он пытается слушать.