Database Reference
In-Depth Information
| createWatcher() erzeugt ein EventEmitter -Objekt, das der Aufrufer nut-
zen kann, um auf Change-Events zu warten. Die relevanten Fähigkei-
ten eines EventEmitter sind die Möglichkeiten, durch den Aufruf seiner
on() -Methode auf Events zu warten und durch den Aufruf seiner emit() -
Methode Events auszulösen.
} watcher.start() ist dafür verantwortlich, HTTP-Requests anzustoßen,
um CouchDB auf Änderungen zu überwachen. Treten Änderungen in Do-
kumenten auf, muss der watcher sie als Change-Events emittieren. Alle
Feed-spezifischen Details der Implementierung sind hier zu finden.
~ Das letzte Stück Code am Ende legt fest, was das Skript machen soll,
wenn es direkt über die Kommandozeile aufgerufen wird. In unserem Fall
ruft das Skript die createWatcher() -Methode auf und richtet Listener für
das zurückgelieferte Objekt ein, die die Ergebnisse über die Standardaus-
gabe ausgeben. Über Kommandozeilen-Argumente kann man festlegen,
welche Datenbank verwendet und bei welcher Sequenz-ID begonnen wer-
den soll.
Bisher enthält dieser Code nichts CouchDB-Spezifisches, sondern zeigt nur
die Art und Weise, wie Node.js die Dinge angeht. Der Code mag Ihnen fremd
vorkommen, insbesondere, wenn Sie noch nicht mit ereignisgesteuerten Ser-
ver-Techniken gearbeitet haben. Doch wir werden das imweiteren Verlauf des
Buches immer mehr nutzen.
Nachdem unser grober Aufbau steht, wollen wir den Code einfügen, der die
Verbindung mit CouchDB über Longpolling herstellt und Events emittiert.
Nachfolgend nur der Code, der in die watcher.start() -Methode gehört. Ein-
gefügt in unseren obigen Entwurf (wo der Kommentar von der Feed-spezi-
fischen Implementierung spricht), sollte die neue vollständige Datei watch _
changes _ longpolling.js heißen.
couchdb/watch_changes_longpolling_impl.js
var
http _ options = {
{
host: watcher.host,
port: watcher.port,
path:
'/' + watcher.db + '/ _ changes' +
'?feed=longpoll&include _ docs=true&since=' + watcher.last _ seq
};
http.get(http _ options, function (res) {
|
var buffer = '' ;
res.on( 'data' , function (chunk) {
buffer += chunk;
});
res.on( 'end' , function () {
 
Search WWH ::




Custom Search