【问题标题】:Nodejs Mysql Check DatabaseNodejs Mysql 检查数据库
【发布时间】:2014-10-09 08:29:43
【问题描述】:


我有 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 服务器。
有什么想法吗?

【问题讨论】:

标签: mysql node.js


【解决方案1】:

我找到了我的问题的答案,
我可以使用 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);
                }
            });
        });
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2017-07-24
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多