我对node.js
完全陌生,我想在MySql
数据库上实现推送通知系统。我的数据库中有一个通知表。在此表中,我有存储recipient_id
,用于指定通知的收件人。现在我希望当recipient_id
的新通知等于当前登录用户的ID通知该用户时。类似Stackoverflow
的内容如果您使用java
标记的问题,则每次创建java
标记的新问题时,页面顶部都会显示通知:1 question with new activity.
抱歉我的英语不好。请帮我实现这个系统,因为我是新手。
答案 0 :(得分:6)
我制作了一个简单的应用程序,就像你的要求一样。
您可以从以下代码行获得帮助。您需要了解代码的基础知识。之后,您将轻松实现目标。此演示应用程序中涵盖了您的要求中的大部分内容。
这不是确切的,但你会通过这个达到你的目标。
在此示例中,任何用户的状态帖子也会同时向所有其他用户发出。我们可以操纵它来实现“1新状态”。
在数据库中创建一个表格,用于保存您的条目
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 :(得分:2)
你可以通过两种方式做到:
websockets
来维护客户端和服务器之间的永久连接,然后您可以通过服务器代码实时向客户端发送通知。请参阅socket.io
教程。这称为推送策略。