Friday, 26 May 2017

Multiple mysql query in nodejs socket.io

Good evening,

I come to expose a subject about "How to run multiple mysql query in nodejs socket.io".

I read the blog documentation from https://github.com/GianlucaGuarini/nodejs-MySQL-push-notifications-demo , which talks about "Push notification server on A MySQL database ". It is interesting in his subject, except that I would like from his example to execute multiple query. And I have not been able to do this for quite a while. If a person understands the subject, I humbly ask him to help me and clarify on this point.

I place a piece of code in order to get a quick overview.

server.js

var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
fs = require('fs'),
mysql = require('mysql'),
connectionsArray = [],
connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'nodejs',
port: 3306
}),
POLLING_INTERVAL = 3000,
pollingTimer;

// If there is an error connecting to the database
connection.connect(function(err) {
// connected! (unless `err` is set)
if (err) {
console.log(err);
}
});

// creating the server ( localhost:8000 )
app.listen(8000);

// on server started we can load our client.html page
function handler(req, res) {
fs.readFile(__dirname + '/client.html', function(err, data) {
if (err) {
  console.log(err);
  res.writeHead(500);
  return res.end('Error loading client.html');
}
res.writeHead(200);
res.end(data);
});
}



var pollingLoop = function() {

// Doing the database query
var query = connection.query('SELECT * FROM users'),
users = []; // this array will contain the result of our db query

// setting the query listeners
query
  .on('error', function(err) {
  // Handle error, and 'end' event will be emitted after this as well
  console.log(err);
  updateSockets(err);
   })
 .on('result', function(user) {
  // it fills our array looping on each user row inside the db
  users.push(user);
  })
 .on('end', function() {
  // loop on itself only if there are sockets still connected
  if (connectionsArray.length) {

    pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL);

    updateSockets({
      users: users
    });
  } else {

    console.log('The server timer was stopped because there are no more    socket connections on the app')

     }
     });
 };


 io.sockets.on('connection', function(socket) {

  console.log('Number of connections:' + connectionsArray.length);
  // starting the loop only if at least there is one user connected
 if (!connectionsArray.length) {
  pollingLoop();
  }

 socket.on('disconnect', function() {
  var socketIndex = connectionsArray.indexOf(socket);
  console.log('socketID = %s got disconnected', socketIndex);
  if (~socketIndex) {
  connectionsArray.splice(socketIndex, 1);
  }
  });

 console.log('A new socket is connected!');
 connectionsArray.push(socket);

 });

  var updateSockets = function(data) {
  // adding the time of the last update
  data.time = new Date();
  console.log('Pushing new data to the clients connected ( connections

  amount = %s ) - %s', connectionsArray.length , data.time);
   // sending new data to all the sockets connected
   connectionsArray.forEach(function(tmpSocket) {
   tmpSocket.volatile.emit('notification', data);
      });
   };

  console.log('Please use your browser to navigate to http://localhost:8000');    



via dev_SI

No comments:

Post a Comment