У меня есть следующий модуль:узел-загрязнен не сохраняется от запуска к запуску
// vote.js
var db = require(./dirty-wrapper);
module.exports = function vote() {
var obj = {};
// increase the score
obj.inc = function(key) {
var pval = db.get(key);
if (!pval) pval = 0;
db.set(key, pval + 1);
};
// decrease the score
obj.dec = function(key) {
var pval = db.get(key);
if (!pval) pval = 0;
db.set(key, pval - 1);
};
// reset the score to 0
obj.reset = function(key) {
db.set(key, 0);
};
obj.get = function(key) {
return db.get(key);
};
return obj;
};
который использует эту простую оболочку для загрязнен:
// dirty-wrapper.js
var dirty = require('dirty');
var db = dirty('vote.db');
module.exports = db.on('load', function() {
var obj = {};
obj.set = function(key, val, callback) {
db.set(key, val);
return callback();
};
obj.get = function(key, callback) {
return callback(db.get(key));
};
obj.reset = function(callback) {
db.forEach(function(key, val) {
val = 0;
});
return callback();
};
return obj;
});
и это мой простой клиент:
// client.js
var vote = require('./vote.js')();
vote.inc('michael');
vote.inc('michael');
vote.inc('michael');
vote.inc('michael');
console.log('michael: ' + vote.get('michael')); // output = michael: 4
Проблема заключается в том, что, когда останавливается, и я снова запустить клиент, выход снова michael: 4
после второго запуска, vote.db
содержит следующее:
$ cat vote.db
{"key":"michael","val":1}
{"key":"michael","val":4}
{"key":"michael","val":4}
{"key":"michael","val":4}
{"key":"michael","val":1}
{"key":"michael","val":4}
{"key":"michael","val":4}
{"key":"michael","val":4}
Во-первых, было бы здорово, если бы кто-то объяснить стратегию append-only
. Во-вторых, я хотел бы понять, почему node-dirty не сохраняется, даже если он записывает на диск каждый прогон.
Спасибо;)
Я думаю, что я смешал функции 'sync' и' async' здесь, это вызывает некоторые проблемы, просто не совсем уверен, что здесь находится правило: – Michael