Вызвать экземпляр SoO IO из компонента или маршрута API на NextJS - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь вызвать экземпляр своего сокет-сервера из конечной точки API-маршрута, чтобы отправить широковещательную рассылку всем клиентам Socket IO при сохранении новой записи в базе данных.

Socket IO правильно работает на моем следующем JS сервере.

Я создал пользовательский файл ./server/index.ts для запуска сервера Next JS и сервера Socket.io, использующих один и тот же порт.

Клиенты успешно подключаются к серверу Socket IO. Но теперь мне бы хотелось, чтобы при вызове из браузера через API-интерфейс, такой как / api / save, я мог использовать свой экземпляр сервера Socket IO для передачи широковещательной рассылки.

Но я не знаю, как получить экземпляр сервера Socket IO из других файлов в проекте.

Спасибо.

. / Server / index.ts

import "reflect-metadata";
import { createServer } from 'http'
import { parse } from 'url'
import next from 'next'
import socketIo from "socket.io";

const port = parseInt(process.env.PORT || '3000', 10);
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {

    const http = createServer((req, res) => {
        const parsedUrl = parse(req.url!, true);
        const { pathname, query } = parsedUrl;

        if (pathname === '/a') {
            app.render(req, res, '/a', query)
        } else if (pathname === '/b') {
            app.render(req, res, '/b', query)
        } else {
            handle(req, res, parsedUrl)
        }
    }).listen(port);

    const ioServer = socketIo(http);
    ioServer.on("connection", function (socket) {
        console.log('An user has connected!');
        socket.on('disconnect', function () {
            console.log('An user has disconnected');
        });
    });

    // tslint:disable-next-line:no-console
    console.log(
        `> Server listening at http://localhost:${port} as ${
            dev ? 'development' : process.env.NODE_ENV
        }`
    );


});

1 Ответ

2 голосов
/ 15 января 2020

Вам не нужно экспортировать экземпляр, просто создайте функцию для выполнения задачи в файле сокета и экспортируйте функцию и используйте ее где угодно.

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