我想实现实时更新。我使用MySQL作为我的数据库,在我的过程中,我已经在我的页面中显示了数据库中的数据。我的问题是例如我在数据库上编辑了一些内容Nodejs
和Socket.io
是否可以自动更新我页面中的视图?
到目前为止,这是我的代码:
server.js
var express = require('express');
var app = express();
var mysql = require('mysql');
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 8000;
var jQuery = require('jQuery');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'node'
});
app.use(express.static(__dirname + '/public'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
connection.connect();
function loadList(callback) {
connection.query('SELECT * FROM inventory', function(err, rows, fields){
if(err) return callback(err);
return callback(null,rows);
});
}
io.on('connection', function(socket){
console.log('A user is connected!!');
loadList(function(err, product_list){
socket.emit('inventory list', {list: product_list});
});
socket.on('disconnect', function() {
console.log('user disconnected!');
});
});
http.listen(8000, function() {
console.log('Listening on ' + port);
});
的index.html
<div class="container">
<h4>Stock List</h4>
<table id="list" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<td>ID</td>
<td>Product Name</td>
<td>Price</td>
<td>Quantity</td>
<td>Status</td>
<td>Date Added</td>
<td></td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="/bower_components/jquery/dist/jquery.min.js"></script>
<script type="text/javascript">
try {
var socket = io.connect('http://127.0.0.1:8000');
//console.log(socket);
}catch(e) {
console.log('ERROR OCURRED: ' + e);
}
if(socket !== undefined) {
socket.on('inventory list', function(data){
var html = '';
$.each(data.list, function(k, v){
html += '<tr>';
html += '<td>' + v.inventory_id + '</td>';
html += '<td>' + v.product_name + '</td>';
html += '<td>' + v.price + '</td>';
html += '<td>' + v.quantity + '</td>';
html += '<td>' + v.status + '</td>';
html += '<td>' + v.date_added + '</td>';
html += '<td><a href="">Edit</a></td>';
html += '</tr>';
});
$('#list tbody').html(html);
});
}
</script>
你能为我提供一个很好的例子吗? 我也找到了这个库: https://github.com/techpines/express.io
它看起来不错,但没有与MySQL集成。