2017-12-27 22 views
2

Ich folge dem folgenden Tutorial, wie man ein Echtzeit-Update von Nodejs und socket.io von einer MySQL-Datenbank erhält. http://markshust.com/2013/11/07/creating-nodejs-server-client-socket-io-mysqlWie kann ich eine Echtzeitaktualisierung auf einer Webseite mit nodejs und socket.io von einer mysql-Datenbank erhalten?

Der Code funktioniert auf der Webseite. Wenn ich die Webseite in zwei Browsern öffne und auf "Neuen Eintrag erstellen" klicke, bekomme ich das Update auf beiden Browsern. Aber wenn ich manuell Daten von der mysql-Konsole in die Datenbank einfüge, sehe ich kein Update auf der Webseite. Wie kann ich dieses Update auch auf der Webseite erhalten?

server.js Datei

var mysql = require('mysql') 
// Let’s make node/socketio listen on port 3000 
var io = require('socket.io').listen(3000) 
// Define our db creds 
var db = mysql.createConnection({ 
host: 'localhost', 
user: 'root', 
database: 'node' 
}) 

// Log any errors connected to the db 
db.connect(function(err){ 
    if (err) console.log(err) 
}) 

// Define/initialize our global vars 
var notes = [] 
var isInitNotes = false 
var socketCount = 0 

io.sockets.on('connection', function(socket){ 
// Socket has connected, increase socket count 
socketCount++ 
// Let all sockets know how many are connected 
io.sockets.emit('users connected', socketCount) 

socket.on('disconnect', function() { 
    // Decrease the socket count on a disconnect, emit 
    socketCount-- 
    io.sockets.emit('users connected', socketCount) 
}) 

socket.on('new note', function(data){ 
    // New note added, push to all sockets and insert into db 
    notes.push(data) 
    io.sockets.emit('new note', data) 
    // Use node's db injection format to filter incoming data 
    db.query('INSERT INTO notes (note) VALUES (?)', data.note) 
}) 

// Check to see if initial query/notes are set 
if (! isInitNotes) { 
    // Initial app start, run db query 
    db.query('SELECT * FROM notes') 
     .on('result', function(data){ 
      // Push results onto the notes array 
      notes.push(data) 
     }) 
     .on('end', function(){ 
      // Only emit notes after query has been completed 
      socket.emit('initial notes', notes) 
     }) 

    isInitNotes = true 
} else { 
    // Initial notes already exist, send out 
    socket.emit('initial notes', notes) 
} 
}) 

Client-Datei

<script 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
</script> 
<script src="http://localhost:3000/socket.io/socket.io.js"></script> 
<script> 
$(document).ready(function(){ 
    // Connect to our node/websockets server 
    var socket = io.connect('http://localhost:3000'); 

// Initial set of notes, loop through and add to list 
socket.on('initial notes', function(data){ 
    var html = '' 
    for (var i = 0; i < data.length; i++){ 
     // We store html as a var then add to DOM after for efficiency 
     html += '<li>' + data[i].note + '</li>' 
    } 
    $('#notes').html(html) 
}) 

// New note emitted, add it to our list of current notes 
socket.on('new note', function(data){ 
    $('#notes').append('<li>' + data.note + '</li>') 
}) 

// New socket connected, display new count on page 
socket.on('users connected', function(data){ 
    $('#usersConnected').html('Users connected: ' + data) 
}) 

// Add a new (random) note, emit to server to let others know 
$('#newNote').click(function(){ 
    var newNote = 'This is a random ' + (Math.floor(Math.random() * 100) + 1) + ' note' 
    socket.emit('new note', {note: newNote}) 
}) 
}) 
</script> 
<ul id="notes"></ul> 
<div id="usersConnected"></div> 
<div id="newNote">Create a new note</div> 

Antwort

0

Es ist wahrscheinlich, weil Sie ein Update auf Socket.IO nicht begehen. Sie sollten iocommit ('someMessage', data) verwenden; wenn Sie manuell einen Datensatz von Ihrem msql cli erstellen.

Lassen Sie mich wissen, wenn das hilft!

Verwandte Themen