Как вызвать socket.on() из отдельного файла

Я пытаюсь вызвать событие socket.on() из внешнего файла .js и не могу понять, что мне не хватает... Я использую NodeJS с ExpressJS. Ниже приведены файлы:

app.js(файл сервера)

  const fs = require('fs');
  const express = require('express');
  const app = express();
  const http = require('http').Server(app);
  var io = require('socket.io')(http);
  ....
  //Socket Io functions
  const ioObj = require( './library/io.js')(app, express, io);
  // This route will be used to print the type of HTTP request the particular Route is referring to
  router.use(function (req, res, next) {
  console.info("/" + req.method);
  next();
  });
  ....

/library/io.js (файл сокетов)

  module.exports = function(app, express, io){
     io.on('connection', async function(socket) {

  socket.on('refreshPage', function(){
    console.info("page should now be refreshed !!");
  socket.emit("refreshPageNow");
  });

  ....

 });

 }

Что я пытаюсь сделать, так это вызвать/получить доступ к событию refreshPage из /library/io.js, чтобы я мог отправить дополнительный сигнал «обновить веб-страницу». Я попытался сделать что-то вроде:

 io.sockets.emit("refreshPage");

и

 ioObj.sockets.emit("refreshPage");

Но не работал...

Этот код кажется законным; то есть, если это не работает в этом внешнем файле, то ИМХО оно не должно работать, если вы поместите код, связанный с io, в основной файл. Итак, следующий вопрос: как вы подключаетесь и отправляете refreshPage с клиента?

Stock Overflaw 23.02.2019 16:31

Я добавляю сокет на веб-страницу ( var socket = io(); ) и использую socket.on(); Дело в том, что я не отправляю refreshPage с клиента, я отправляю его из события данных, которое находится в router.post(); Событие данных не вызывается только один раз , это вызывается для каждого шага оператора for, это может быть проблемой? Итак, я вызываю refreshPage из router.post() из файла сервера и в refreshPage выдаю refreshPageNow

DIIMIIM 23.02.2019 16:44

Я подозреваю, что вы не connect со стороны клиента, и, что более важно, вы пытаетесь передать клиентское событие с сервера, используя socket.io package вместо socket.io-client package. Возможно, просмотр эта тема поможет.

Stock Overflaw 23.02.2019 17:16

Я использовал ту же методологию, и она работала, единственная разница заключалась в том, что остальные сокеты вызывались непосредственно с веб-страницы без каких-либо вещей nodejs. Это немного отличается, например, я должен использовать nodejs, я не знаю ... проблема будет между io.sockets.emit("refreshPage"); и socket.on('refreshPage', function(){.... Я проверил это с некоторыми журналами консоли, я получаю консоль, где я вызываю refreshPage в узле, но У меня не открывается консоль от socket.on

DIIMIIM 23.02.2019 18:48

Это разница, о которой я думал, когда говорил о упаковках socket.io и socket.io-client. Отправка события из экземпляра socket.io не будет обнаружена сама по себе. Вам нужно создать событие из экземпляра socket.io-client (который устанавливается при установке socket.io). Прочтите ветку, ссылку на которую я дал ранее.

Stock Overflaw 23.02.2019 19:15

Хорошо, сэр, большое спасибо! Я прочитаю эту документацию

DIIMIIM 23.02.2019 19:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
80
0

Другие вопросы по теме