Nodejs Mysql检查数据库

时间:2014-10-09 08:29:44

标签: mysql node.js


我有mysql数据库,nodejs服务器和移动客户端架构。
我的系统基本工作,移动客户端通过node.js监控数据库 当新数据添加数据库时,nodejs向所有客户端发送推送通知,客户端请求新数据,然后nodejs响应新数据。
 移动客户端使用REST服务获取数据。
我的问题是,
我在mysql中有3种类型的表:
第一个必须每15分钟检查一次,
第二个必须每2秒检查一次,
第三个必须每隔3.5分钟从nodejs检查一次到新的数据检查。

这是我的代码没有自动检查数据库:

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 个答案:

答案 0 :(得分: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);
                }
            });
        });
    }
});