如何使用node.js在mysql数据库上实现推送通知系统

我完全是node.js新手,我想在MySql数据库上实现推送通知系统。 我在我的数据库中有一个通知表。 在这个表中,我已经存储了指定通知收件人的recipient_id。 现在我想当一个新的通知与recipient_id等于当前login用户的ID通知该用户。 像Stackoverflow东西如果你是在例如java标记的问题,每当一个新的问题与java标签创build,通知会出现在页面的顶部: 1 question with new activity. 对不起,我英文很差。 请帮我实施这个系统,因为我是新手。

我做了一个简单的应用程序,像你的要求。

您可以从下面的代码行获得帮助。您需要了解代码的基本知识。 之后,你将轻松实现你的目标。 这个演示程序涵盖了大部分来自你的需求的东西。

它不是一个确切的,但你会通过这个实现你的目标。

在这个例子中,任何用户的状态信息也会同时发送给所有其他用户。 我们可以操纵它来达到“1个新的地位”。

在数据库中创build一个表,在那里你的条目被保存为CREATE TABLE status

 ( `status_id` INT NOT NULL AUTO_INCREMENT, `s_text` TEXT, `t_status` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY ( `status_id` ) ); 

//server.js

 var app = require("express")(); var mysql = require("mysql"); var http = require('http').Server(app); var io = require("socket.io")(http); /* Creating POOL MySQL connection.*/ var pool = mysql.createPool({ connectionLimit: 100, host: 'localhost', user: 'root', password: '', database: 'fbstatus', debug: false }); app.get("/", function(req, res) { res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket) { console.log("A user is connected"); socket.on('status added', function(status) { add_status(status, function(res) { if (res) { io.emit('new status', status); } else { io.emit('error'); } }); }); }); var add_status = function(status, callback) { pool.getConnection(function(err, connection) { if (err) { connection.release(); callback(false); return; } connection.query("INSERT INTO `status` (`s_text`) VALUES ('" + status + "')", function(err, rows) { connection.release(); if (!err) { callback(true); } }); connection.on('error', function(err) { callback(false); return; }); }); } http.listen(3000, function() { console.log("Listening on 3000"); }); 

//index.html

 <html> <head> <title>Socket.io</title> <script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <script src = "http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> <script> $(document).ready(function(){ var socket = io(); $("#add_status").click(function(){ socket.emit('status added',$("#comment").val()); }); socket.on('new status',function(msg){ var count = $('#count_status').text(); var valCount = parseInt(count); if(valCount>=1) { valCount = valCount+1; } else { valCount = 1; } var showMsg = '<div id="count_status"> '+valCount+' </div> new status'; $("#show_comments").html(showMsg); }); }); </script> </head> <body> <div id="comment_box" style = "padding:5%;"> <textarea id="comment" rows="5" cols="70"></textarea><br /><br /> <input type="button" id="add_status" value="Add"> </div> <div id= "show_comments" class = "jumbotron"></div> </body> </html> 

使用以下命令节点Server.js运行应用程序

现在在浏览器中运行http:// localhost:3000 /并查看结果,打开一个新窗口,在窗口中发布状态并在窗口中查看新的状态通知。

谢谢

编辑:这是一个伟大的启动教程。 一些事情需要修改。

  1. connection.release()代码结束了不可读和不工作。 你应该彗星或删除它。

2.在我的情况下的实际产出: daniel adenew软件工程师

你可以做2种方法:

  • 每n秒查询一次服务器是否有新消息。 将最后一次检查的时间戳作为parameter passing,并且如果自上次检查以来有任何通知,则返回为json并将其显​​示在客户端中。 这被称为策略。
  • 或者,您可以使用维护您的客户端和服务器之间永久连接的websockets ,然后您可以实时从服务器代码向客户端发送通知。 请参阅socket.io教程。 这被称为推动策略。