2014-10-09 2 views
0


mysql 데이터베이스, nodejs 서버 및 모바일 클라이언트 아키텍처가 있습니다.
내 시스템이 기본적으로 작동하며 모바일 클라이언트가 node.js를 통해 데이터베이스를 모니터링합니다.
새 데이터가 데이터베이스를 추가하면 nodejs는 모든 클라이언트와 클라이언트에 푸시 알림을 보내고 새 데이터를 요청한 다음 노드가 새 데이터를 응답합니다.
모바일 클라이언트가 REST 서비스를 사용하여 데이터를 가져옵니다.
1 일마다 2 초,
3 일부터 매 3.5 분을 확인하는 확인하기 위해 모든 15 분,
2 하나가 확인해야 :
내 문제는
내가 MySQL의 3 타입의 테이블을 가지고있다 nodejs를 새 데이터 검사로 변경하십시오.
Nodejs MySQL 데이터베이스 확인

여기에 자동으로 데이터베이스를 확인하지 않고 내 코드입니다 :

var nodePort = 3030; 
var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var db = require('mysql'); 
var dbPool = db.createPool({ 
    host : 'localhost', 
    user : 'root', 
    password : '1234', 
    database : 'test', 
    port : 3306 
}); 

var gcm = require('node-gcm'); 
var message = new gcm.Message(); 
var sender = new gcm.Sender('AIzaSyChp2jTQsgPkLaaVgFh6yoovu1Td7tuQMo'); //Api Key 
var registrationIds = []; 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 

app.get('/api/db', function(req, res){ 
    res.setHeader('content-type', 'application/json'); 
    dbPool.getConnection(function(objErr, objConn){ 
     if(objErr){ 
      sendError(res, 503, 'error', 'connection', objErr); //503 - Service Unavailable 
     }else{ 
      objConn.query("SELECT * FROM person", function(Err, Rows, Fields){ 
       if(Err){ 
        sendError(res, 500, 'error', 'query', Err); 
       }else{ 
        res.send({ 
         results : 'success', 
         err : '', 
         err_type : '', 
         fields : Fields, 
         rows : Rows, 
         length : Rows.length 
        }); 
        objConn.release(); 
       }//else 
      }); 
     }//else 
    }); 
}); 
/* 
app.get('/api/db:id', function(req, res){ 
    var id = req.params.id; 
    res.setHeader('content-type', 'application/json'); 
    dbPool.getConnection(function(objErr, objConn){ 
     if(objErr){ 
      sendError(res, 503, 'error', 'connection', objErr); //503 - Service Unavailable 
     }else{ 
      objConn.query("SELECT * FROM person WHERE id = ? ",[id], function(Err, Rows, Fields){ 
       if(Err){ 
        sendError(res, 500, 'error', 'query', Err); 
       }else{ 
        res.send({ 
         results : 'success', 
         err : '', 
         err_type : '', 
         fields : Fields, 
         rows : Rows, 
         length : Rows.length 
        }); 
        objConn.release(); 
       }//else 
      }); 
     }//else 
    }); 
}); 
*/ 
app.post('/api/db', function(req, res){ 
    if(!req.body.tableName){ 
     var data = { 
      ID : req.body.id, 
      Name : req.body.name 
     } 
     tableName = 'person'; 
    }else{ 
     var data = { 
      email : req.body.email, 
      regid : req.body.regid 
     } 
     tableName = 'users'; 
    }//else 
    console.log(req.body); 
    res.setHeader('content-type', 'application/json'); 
    dbPool.getConnection(function(objErr, objConn){ 
     if(objErr){ 
      sendError(res, 503, 'error', 'connection', objErr); //503 - Service Unavailable 
     }else{ 
      objConn.query("INSERT INTO "+tableName+" SET ? ", data, function(Err, Rows, Fields){ 
       if(Err){ 
        sendError(res, 500, 'error', 'query', Err); 
       }else{ 
        res.send({ 
         results : 'success' 
        }); 
        objConn.release(); 
        if(!req.body.tableName){ gcmSend(); } 
       }//else 
      }); 
     }//else 
    }); 
}); 

app.put('/api/db', function(req, res){ 
    var id = req.body.id; 
    var data = { 
     Name : req.body.name 
    } 
    res.setHeader('content-type', 'application/json'); 
    dbPool.getConnection(function(objErr, objConn){ 
     if(objErr){ 
      sendError(res, 503, 'error', 'connection', objErr); //503 - Service Unavailable 
     }else{ 
      objConn.query("UPDATE person SET ? WHERE ID = ? ", [data,id], function(Err, Rows, Fields){ 
       if(Err){ 
        sendError(res, 500, 'error', 'query', Err); 
       }else{ 
        res.send({ 
         results : 'success' 
        }); 
        objConn.release(); 
        gcmSend(); 
       }//else 
      }); 
     }//else 
    }); 
}); 

app.delete('/api/db/:id', function(req, res){ 

    var id = req.params.id; 
    res.setHeader('content-type', 'application/json'); 
    dbPool.getConnection(function(objErr, objConn){ 
     if(objErr){ 
      sendError(res, 503, 'error', 'connection', objErr); //503 - Service Unavailable 
     }else{ 
      objConn.query("DELETE FROM person WHERE ID = ? ",[id], function(Err, Rows, Fields){ 
       if(Err){ 
        sendError(res, 500, 'error', 'query', Err); 
       }else{ 
        res.send({ 
         results : 'success' 
        }); 
        objConn.release(); 
        gcmSend(); 
       }//else 
      }); 
     }//else 
    }); 
}); 

function gcmSend(){ 
    dbPool.getConnection(function(objErr, objConn){ 
     if(objErr){ 
      console.log('Message couldn\' t send'); 
     }else{ 
      objConn.query("SELECT * FROM registers", function(Err, Rows, Fields){ 
       for(var i=0; i<Rows.length; i++){ 
        registrationIds.push(Rows[i].regid); 
        console.log(Rows[i].regid); 
       } 
      }); 
     } 
    }); 
    message = new gcm.Message({ 
     collapseKey: 'demo', 
     delayWhileIdle: true, 
      timeToLive: 3, 
      data: { 
       title: 'Node.js den mesaj gönderildi' 
      } 
    }); 
    sender.send(message, registrationIds, 4, function (err, result) { 
     console.log(result); 
    }); 
} 

function sendError(res, iStatusCode, strResult, strType, objError){ 
    res.send({ 
     results : strResult, 
     err : objError.type, 
     err_type : strType 
    }); 
} 


app.listen(nodePort); 
console.log('App listening on port' + nodePort); 

나는 기간에 (모바일 요청없이) 자동으로 내 데이터베이스를 확인합니다. 데이터가 다른 시스템 (모바일이 아님)에서 추가 될 수 있기 때문에 해당 시스템이 nodejs 서버에 통지 할 수 없기 때문입니다.
아이디어가 있습니까?

+1

이 봐 ['에서는 setTimeout/setInterval'] (http://nodejs.org/api를 타고 /timers.html). – robertklep

답변

0

내 질문에 대한 답변을 찾았습니다.
setInterval 또는 setTimeout을 사용할 수 있지만 nodejs의 사용자가 간단한 모듈을 만들었습니다.
은 여기에 있습니다 : 아래

https://www.npmjs.org/package/waitjs

코드 :

require('waitjs'); 

dbPool.getConnection(function(objErr, objConn){ 
    if(objErr){ 
     console.log('Message couldn\' t send'); 
    }else{ 
     repeat(2000, function() { 
      objConn.query("SELECT * FROM person", function(Err, Rows, Fields){ 
       for(var i=0; i<Rows.length; i++){ 
        console.log(Rows[i].Name); 
       } 
      }); 
     }); 
     repeat(900000, function() { 
      objConn.query("SELECT * FROM person", function(Err, Rows, Fields){ 
       for(var i=0; i<Rows.length; i++){ 
        console.log(Rows[i].ID); 
       } 
      }); 
     }); 
     repeat(210000, function() { 
      objConn.query("SELECT * FROM person", function(Err, Rows, Fields){ 
       for(var i=0; i<Rows.length; i++){ 
        console.log(Rows[i].ID); 
       } 
      }); 
     }); 
    } 
});