Использование Socket.io emit в другом модуле (Node.js) - PullRequest
1 голос
/ 11 июля 2020

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

Цель приложения: Мое приложение принимает имя пользователя и пароль от пользователя, запускает модуль, который запускает кукольник для автоматизации задач, одновременно предоставляя пользователю текущие обновления о ходе кукловода.

2 подключенных пользователя в то же время может вводить разные учетные данные, и кукловод должен работать одновременно, выводя прогресс для указанного c пользователя своей работы.

Я использую node.js + express + e js + socket .io, созданный с помощью генератора express.

Файловая структура выглядит так:

bin/
--www.js
app.js
scraper.js
views/
--index.js
routes/
--index.ejs
public/
  ...

У меня есть socket.io, работающий в модуле www.js, где находится сервер настроен, то, что я настроил, - это когда пользователь нажимает кнопку отправки на передней панели, socket.io выдает уникальное полученное сообщение (в www.js) и вызывает функцию launchScraper внутри scraper.js.

Я ж ant launchScraper, чтобы затем отправлять текущие обновления этому отдельному пользователю. т.е. успешно вошел в систему, работа выполнена и т.д. c.

Вопрос: Кажется, я не могу получить парсер. js для отправки сообщения этому уникальному пользователю (используя его socket.id ), Я думаю, что мне не хватает теории. Вот мой код:

www.js

const scraper = require('../scraper');
const socketio = require('socket.io');
...
const server = http.createServer(app);
const io = socketio(server);
...
io.on('connection', (socket) => {
console.log('New connection: '+ socket.id);
...
  socket.on('launchScraper', (socket) =>{
  console.log('received client launchScraper');
  scraper.launchScraper(io,userCredentials);
  })

скребок. js

 const puppeteer = require('puppeteer'); 

//This emits the message to all users, but I've tried variations sending `socket.id` in etc and I cannot seem to get it to work.
function emitMessage(io,msg){
io.emit('message',msg);
console.log(msg);
}

async function launchScraper(io,userData) {

emitMessage(io, 'Launching Scraper...'); //Sending io in
const browser = await puppeteer.launch({..});
const page = await browser.newPage();
...

Может кто помочь или предложить лучший способ сделать это? Я просто не хочу, чтобы много кода - это www.js, так как я не верю, что код должен там жить ...

Я новичок ie в Node, и я изо всех сил пытаюсь понимать экземпляры, конструкторы и т. д. c.

1 Ответ

0 голосов
/ 12 июля 2020

Оказывается, мне нужно было отправить «сокет» с моим запросом, а не экземпляр «io».

Это, похоже, разрешило проблему.

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