2010-06-21 9 views
27

Sto usando Node.js per alcuni progetti di lavoro e vorrei monitorare il mio database Mongo (raccolta) per le modifiche, in pratica sparare un evento se qualcosa viene aggiunto.Monitoraggio di Mongo per le modifiche con Node.js

Qualcuno sa se questo è possibile? Sto usando i driver node-mongodb-native.

Se non lo è, mi piacerebbe anche qualche suggerimento disponibile su come spingere i dati dal server (eseguito con node) nel browser client.

risposta

3

La domanda è se tutti i dati vengono aggiunti al database tramite l'app node.js. In tal caso, è possibile utilizzare la classe EventEmitter di node.js per attivare un evento (http://nodejs.org/api.html#eventemitter-14).

Se il database è popolato da qualche altra app, le cose stanno diventando difficili. In questo caso avresti bisogno di qualcosa come un trigger del database, che è AFAIK non ancora disponibile in MongoDB.

La trasmissione di eventi al client (ovvero Comet) sarà possibile una volta che l'API di Websockets HTML 5 si farà strada in tutti i principali browser.

Nel frattempo, puoi solo provare ad emulare questo comportamento usando tecniche come il polling AJAX (a lungo termine), frame per sempre ecc. Ma ognuna di esse ha i suoi punti deboli.

+1

Se è un altra applicazione sincrono che fa l'aggiunta, è possibile utilizzare una coda di messaggi per notificare la tua app node.js. Questo sarebbe tutto sul lato server. – igorw

3

Accenderei la replica nel tuo mongodb. C'è una replica? database che contiene un elenco di modifiche, simile al log di replica di mysql. Puoi controllarlo.

-Daniel

0

collection.insert ({ "key1": val1, "key2": "val2"}, la funzione (err, info) {
se (err) {// gestire questo } else { se (info) {

si chiama un fireandforgetfunction (info);. qui in grado di scrivere i registri o inviare a SQS o fare qualche altra uova bambino o in cosa processo Questo potrebbe anche essere un callback ma penso che un incendio e dimenticare possano fare nella maggior parte delle circostanze. Dico fuoco e dimentico perché pr esume che non è necessario tenere premuto la risposta in modo da poter restituire ciò che mai è necessario per il client. E in parte-risposta alla tua altra domanda è possibile restituire JSON come questo

  db.close(); 
     var myJSON =[];        
     sys.puts("Cool info stored and did a non blocking fire and forget for some other mongo monitoring stuff/process and sending control back to the browser"); 
     sys.puts(sys.inspect(info));//remove later 
     myJSON.push({"status":"success"});      
     myJSON.push({"key1":val1,"key2":val2});//or whatev you want to send 
     res.writeHead(200, { "Content-Type" : "text/plain" }); 
     res.write(JSON.stringify(myJSON)); 
     res.end(); 
     } 
    } 
Problemi correlati