Sunday, 12 March 2017

nodejs socket mysql pool creates infinte loop

i trying to create a chat application using nodejs socket mysql at the backend. the chat functionality works but i'm trying to save the message into mysql database.

The problem here is that everytime a user is join the chat, i get infinite loop of messages saving into the database. This problem started after i tried adding mysql. Any idea please

    var express = require('express');
    var app = express();
    var server = require('http').createServer(app);
    var mysql = require('mysql')
    var io = require('socket.io')(server);
    var port = process.env.PORT || 3000;

    server.listen(port, function () {
      console.log('Server listening at port %d', port);
    });

    // Define our db creds
    var pool =  mysql.createPool({
        connectionLimit : 5, 
        host     : '127.0.0.1',
        user     : 'xxxx',
        password : 'xxxxxxxx',
        database : 'notes',
        debug    :  false
    });


    pool.getConnection(function(err){
        if (!!err) {
          console.log("error")
        }
        else{
          console.log("Connected")
        }
    })

    app.use(function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();
    });


    var numUsers = 0;

    io.on('connection', function (socket) {
          var addedUser = false;


          socket.on('new message', function (data) {
              add_status(data,function(res){
                  if(res){
                      socket.emit('new message', {username: socket.username, message: data});
                  } else {
                      socket.emit('error');
                  }
              });
          });


          var add_status = function (data,callback) {
              pool.getConnection(function(err,connection){
                  if (err) {
                    callback(false);
                    return;
                  }
              connection.query("INSERT INTO `note` (`username`, `message`) VALUES ('"+socket.username+"', '"+data+"')"
                ,function(err,rows){
                      connection.end();
                      if(!err) {
                        callback(true);
                      }
                  });
               connection.on('error', function(err) {
                        callback(false);
                        return;
                  });
              });
          }

      // when the client emits 'add user', this listens and executes
          socket.on('add user', function (userDetail) {
            if (addedUser) return;

            // we store the username in the socket session for this client
            socket.username = userDetail.user.name;
            socket.token = userDetail.token;

            console.log("token", userDetail.token);  
            console.log("username", userDetail.user.name);  

            ++numUsers;
            addedUser = true;
            socket.emit('login', {username: socket.username, numUsers: numUsers});
            socket.emit('user joined', {username: socket.username, numUsers: numUsers});


          });

      });



via netx

No comments:

Post a Comment