Метод генерации сокетов не работает на клиенте - Node JS - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю над 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".

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