Database Reference
In-Depth Information
Pre-/Post-Commit-Hooks
Riak kann die Daten über sog. Hooks vor oder nach dem Speichern eines
Objekts umwandeln. Pre- und Post-Commit-Hooks sind einfache JavaScript-
(oder Erlang-)Funktionen, die vor oder nach dem Commit ausgeführt werden.
Pre-Commit-Funktionen können das eingehende Objekt in irgendeiner Form
modifizieren (und sogar einen Fehler auslösen), während Post-Commits auf
einen erfolgreichen Commit reagieren (etwa in einen Log schreiben oder eine
E-Mail senden) können.
Jeder Server besitzt eine app.config -Datei, in der die Lage eigener Java-
Script-Codes festgelegt wird. Öffnen Sie diese Datei zuerst für Server dev1
unter dev/dev1/etc/app.config , und suchen Sie die Zeile, die js _ source _ dir
enthält. Tragen Sie dort den gewünschten Verzeichnispfad ein. Beachten Sie,
dass diese Zeile mit einem %-Zeichen auskommentiert sein kann, d. h., Sie
müssen die Zeile evtl. zuerst aktivieren, indem Sie dieses Zeichen löschen.
Unsere Zeile sieht wie folgt aus:
{js _ source _ dir, "~/riak/js _ source"},
Sie müssen diese Änderung dreimal vornehmen, einmal für jeden dev-Server.
Wir wollen einen Validator entwickeln, der pre-commit ausgeführt wird. Er
parst die Daten und stellt sicher, dass es eine Bewertung gibt und dass sie
im Bereich von 1 bis 4 liegt. Wird eines dieser Kriterien nicht erfüllt, wird ein
Fehler ausgelöst und unser Validator gibt ein JSON-Objekt zurück, das aus
{"fail" : message} besteht, wobei message die Nachricht ist, die wir an den
Benutzer zurückgeben wollen. Erfüllen die Daten die Bedingungen, geben
wir nur das Objekt zurück und Riak speichert den Wert.
riak/my_validators.js
function good _ score(object) {
try {
/ * Daten aus dem Riak-Objekt ziehen und als JSON parsen * /
var data = JSON.parse( object.values[0].data );
/ * Fehler, wenn keine Bewertung vorliegt * /
if ( !data.score || data.score === '' ){
throw ( 'Score is required' );
}
/ * Fehler, wenn Bewertung nicht im gültigen Wertebereich liegt * /
if ( data.score < 1 || data.score >4){
throw ( 'Score must be from 1 to 4' );
}
} catch ( message ) {
/ * Riak erwartet bei einem Fehler die folgenden JSON-Daten * /
return { "fail" : message };
}
/ * Keine Probleme, also weitermachen * /
return object;
}
 
Search WWH ::




Custom Search