Я пытаюсь вызвать событие 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");
Но не работал...
Я добавляю сокет на веб-страницу ( var socket = io(); ) и использую socket.on(); Дело в том, что я не отправляю refreshPage с клиента, я отправляю его из события данных, которое находится в router.post(); Событие данных не вызывается только один раз , это вызывается для каждого шага оператора for, это может быть проблемой? Итак, я вызываю refreshPage из router.post() из файла сервера и в refreshPage выдаю refreshPageNow
Я подозреваю, что вы не connect со стороны клиента, и, что более важно, вы пытаетесь передать клиентское событие с сервера, используя socket.io package вместо socket.io-client package. Возможно, просмотр эта тема поможет.
Я использовал ту же методологию, и она работала, единственная разница заключалась в том, что остальные сокеты вызывались непосредственно с веб-страницы без каких-либо вещей nodejs. Это немного отличается, например, я должен использовать nodejs, я не знаю ... проблема будет между io.sockets.emit("refreshPage"); и socket.on('refreshPage', function(){.... Я проверил это с некоторыми журналами консоли, я получаю консоль, где я вызываю refreshPage в узле, но У меня не открывается консоль от socket.on
Это разница, о которой я думал, когда говорил о упаковках socket.io и socket.io-client. Отправка события из экземпляра socket.io не будет обнаружена сама по себе. Вам нужно создать событие из экземпляра socket.io-client (который устанавливается при установке socket.io). Прочтите ветку, ссылку на которую я дал ранее.
Хорошо, сэр, большое спасибо! Я прочитаю эту документацию



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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