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 서버에 통지 할 수 없기 때문입니다.
아이디어가 있습니까?
이 봐 ['에서는 setTimeout/setInterval'] (http://nodejs.org/api를 타고 /timers.html). – robertklep