Излучение из socket.io после запроса базы данных в узле / экспрессе - PullRequest
0 голосов
/ 08 июля 2019

У меня есть компонент, который при монтировании делает запрос на мой сервер, чтобы получить (очень длинный) список имен.Чтобы это не задерживало рендеринг моего компонента (поскольку он может рендериться только с непустым списком), я хочу отправить ему серию гораздо меньших списков с использованием сокетов вместо одного длинного списка с * 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 виден, поэтому я знаю, что он пытается слушать.

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете обратиться по этой ссылке socket.io-client

var socket = require('socket.io-client')('http://localhost:4200');
socket.on('connect', function(){});
socket.on('event', function(data){});
socket.on('disconnect', function(){});

Нужно соединиться с сервером вот так.

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