每次函数对数据库进行更改时,我都希望使用nodeJS来刷新我的视图.如果我们以MEAN-stack为例,我不想每隔x秒发送一次$http请求来检查是否对数据库进行了更改.我希望前端自动得到通知,然后
这是什么最佳做法?我会在服务器端使用某种Oberserver模式,但不知道如何通过它来通知前端.
要让前端自动获得通知然后更新视图,您可以使用Socket.io框架.您可以在他们的网站上找到所有文档: http://socket.io/
这是一个基本的例子:
app.js(设置服务器)
var http = require('http'); var express = require('express'); var port = normalizePort(process.env.PORT || '1000'); var app = express(); var server = http.createServer(app); server.listen(port); io = require('socket.io')(server); ///ROUTES var routes = require('./routes/index')(io); var users = require('./routes/users'); ///////
我将io对象传递给路由索引(当然,在app.js上还有很多东西.这只是一个基本的例子……).
mysql.js(为连接创建池)
var mysql = require("mysql"); var pool = mysql.createPool({ host : 'host', user : 'user', password : 'pass', database : 'db_name', connectionLimit: 1000 }); exports.pool = pool;
index.js
module.exports = function(io) { var express = require('express'); var router = express.Router(); var mysql = require('../mysql.js').pool; io.on('connection', function (socket) { socket.on('event_name', function (data) { mysql.getConnection(function(err,connection){ if (err) { connection.release(); return; } connection.query("SQL STUFF",function(err,rows){ if(rows.length>0){//checks if there are more than 0 rows returned..... socket.emit('do_something',data_you_want_to_pass); } else{ socket.emit('do_something_else',data_you_want_to_pass); } connection.release(); }); connection.on('error', function(err) { return; }); }); }); }); router.get('/', function(req, res) { res.render("index"); }); return router; }
然后在html页面上你又有了socket.emit和socket.on …..
我建议你看看文档和其他几个例子……
我希望我帮助过你.