Я работаю над Socket IO с Node JS и чистым Javascript на стороне клиента. Когда соединения на обоих концах установлены, сообщение успешно передается с сервера на клиент, но при нажатии кнопки сокет ничего не отправляет на сервер, я не знаю, в чем проблема.
Код серверной стороны
const phantom = require('phantom');
const ev = require('events');
const event = new ev.EventEmitter();
const mysql = require("mysql");
const ms_connect = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'scrapper_db'
});
const express = require("express");
const app = express();
const internetAvailable = require("internet-available");
const body_parser = require('body-parser');
const server = app.listen(8080, function() {
console.log('Listening on 8080');
});
const io = require("socket.io").listen(server);
/*----------------------------------------------------------------------------------------------------------
B A S I C A P P R O U T I N G F U N C T I O N S
----------------------------------------------------------------------------------------------------------*/
app.use(express.static(__dirname + "/public"));
app.use(body_parser.json());
app.get("/", function(req, res) {
res.sendFile("/index.html");
})
/*----------------------------------------------------------------------------------------------------------
G L O B A L F U N C T I O N S
----------------------------------------------------------------------------------------------------------*/
function Globals() {
this.socketConnection = async function() {
let p = new Promise(function(res, rej) {
io.on("connection", function(socket) {
if (socket.connected) {
res(socket);
} else {
rej("Socket Connection Error !");
}
})
})
return await p;
}
this.databaseConnection = async function() {
let p = new Promise(function(res, rej) {
ms_connect.connect(function(err) {
if (err) {
rej({
success: false,
data: err
});
} else {
res({
success: true
});
}
})
})
return await p;
}
}
/*----------------------------------------------------------------------------------------------------------
G L O B A L F U N C T I O N S
----------------------------------------------------------------------------------------------------------*/
function ScrapJobs(socket) {
var _this = this;
this.init = function() {
console.log(socket.client.id);
}
}
var GL = new Globals();
GL.socketConnection().then(function(s) {
s.emit("Hi");
s.on("Nady", function() {
console.log("I am from client");
})
new ScrapJobs(s).init();
})
Приведенный выше код успешно отправляет клиенту привет.
Код клиента
function App() {
this.socketConnection = async function() {
var socket = io('http://localhost:8080');
let p = new Promise(function(res, rej) {
socket.on('connect', function() {
if (socket.connected) {
res(socket);
}
})
})
//returns the socket if connected
return await p;
}
}
/*----------------------------------------------------------------------------------------------------------
E V E N T S S C R I P T S
----------------------------------------------------------------------------------------------------------*/
function _(el) {
this.el = el;
this.ev = function(e, callback) {
switch (arguments.length) {
case 2:
{
this.el.addEventListener(e, callback);
break;
}
}
return this;
}
}
function id(a) {
return new _(document.getElementById(a))
}
function cl(a) {
return new _(document.getElementsByClassName(a))
}
function tg(a) {
return new _(document.getElementsByTagName(a))
}
function qs(a) {
return new _(document.querySelector(a))
}
function qa(a) {
return new _(document.querySelectorAll(a))
}
/*----------------------------------------------------------------------------------------------------------
C O D E
----------------------------------------------------------------------------------------------------------*/
function ScrapJobs(st) {
var _this = this;
var socket = st;
socket.on("Hi", function() {
console.log("I am called from server");
})
this.attachListeners = function() {
qs("#init-scrap").ev("click", _this.startScrapping);
qs("#play-scrap").ev("click", _this.playScrapping);
qs("#pause-scrap").ev("click", _this.pauseScrapping);
qs("#stop-scrap").ev("click", _this.stopScrapping);
}
this.startScrapping = function() {
console.log("I am clicked");
console.log(st.id);
st.emit("Nady");
}
}
/*----------------------------------------------------------------------------------------------------------
I N S T A N T I A T E A P P
----------------------------------------------------------------------------------------------------------*/
window.onload = function() {
if (document.readyState == 'complete') {
var app = new App();
app.init("scrap_jobs").then(function() {
app.attachListeners().then(function() {
app.socketConnection().then(function(sock) {
new ScrapJobs(sock).attachListeners();
})
})
});
}
}
В скриптах на стороне клиента, когда я нажимаю кнопку, он не генерирует событие "Nady".