2016-04-14 11 views
0

Ich versuche redlock Modul zu verwenden, aber ich bin vor einem Fehler, dass ich nicht durchkommen.Redlock Fehler in Knoten js

Hier ist, was meine redlock Datei wie folgt aussieht:

var redis = require('redis'); 
var Redlock = require('redlock'); 
var logger = require('./logger.js'); 

var client; 

module.exports.redisConnection = function(port,host){ 
    client = redis.createClient(port,host); 

    client.on('connect',function(){ 
     logger.info("Redis default connection open to "+host+":"+port); 
    }); 

    client.on('error',function(err){ 
     logger.info("Redis default connection error "+err); 
     logger.info("Redis Path : "+host+":"+port); 
    }); 

    process.on('SIGINT', function() { 
     client.quit();  
     logger.info("Redis default connection disconnected"); 
     process.exit(0); 
    }); 
}; 

var redlock = new Redlock(
    [client], 
    { 
     driftFactor : 0.01, 
     retryCount : 15, 
     retryDelay : 200 
    } 
); 

redlock.on('clientError', function(err) { 
    logger.info("A Redis Error Has Occurred : "+err); 
}); 

module.exports.lockRessource = function(ressource_id,callback){ 
    redlock.lock(ressource_id,2000,function(err,lock){ 
     if(err){ 
      callback(err,null); 
     } 
     else{ 
      callback(null,lock); 
     } 
    }); 
}; 

module.exports.unlockLock = function(lock,callback){ 

    lock.unlock(function(err){ 
     if(err){ 
      callback(true,null); 
     } 
     else{ 
      callback(null,true); 
     } 
    }); 
}; 

Wenn ich versuche, die lockRessource Funktion von einem anderen Modul aufrufen, ich einen Fehler:

2016-04-14T16: 28: 55,020 - Info: Typeerror: kann Eigenschaft 'set' undefinierter auf Anfrage (/usr/app/node_modules/redlock/redlock.js:260:18) bei /usr/app/node_modules/redlock/redlock.js:314 lesen: 12 bei Array.forEach (native) bei Versuch (/usr/app/node_modules/redlock/redlock.js:313:24) bei /usr/app/node_modules/redlock/redlock.js:318:10 bei Promise._execute (/usr/app/node_modules/redlock/node_modules/bluebird/js/release/debuggability.js:272:9) bei Promise._resolveFromExecutor (/usr/app/node_modules/redlock/node_modules/bluebird/js/release/promise.js:474:18) bei neuen Promise (/ usr/app/node_modules/redlock/node_modules/drossel/js/promise.js release /: 77: 14) bei Redlock._lock (/usr/app/node_modules/redlock/redlock.js:249:9) bei Redlock.lock (/ usr/app/node_modules/redlock/redlock. js: 111: 14) bei Object.module.exports.lockRessource (/usr/app/redisdata.js:42:10)

haben Sie eine Ahnung, woher das kommen könnte? Es scheint, als ob ich mit diesem Modul nichts Verrücktes mache.

Vielen Dank!

Antwort

0

Init-Redlock nachdem der Client zugewiesen wurde.

Ihre redlock Datei wird wie folgt aussehen:

var redis = require('redis'); 
var Redlock = require('redlock'); 
var logger = require('./logger.js'); 

var client; 
var redlock; 

module.exports.redisConnection = function(port,host){ 
    client = redis.createClient(port,host); 
    redlock = new Redlock(
     [client], 
     { 
      driftFactor : 0.01, 
      retryCount : 15, 
      retryDelay : 200 
     } 
    ); 

    client.on('connect',function(){ 
     logger.info("Redis default connection open to "+host+":"+port); 
    }); 

    client.on('error',function(err){ 
     logger.info("Redis default connection error "+err); 
     logger.info("Redis Path : "+host+":"+port); 
    }); 

    redlock.on('clientError', function(err) { 
     logger.info("A Redis Error Has Occurred : "+err); 
    }); 

    process.on('SIGINT', function() { 
     client.quit(); 
     logger.info("Redis default connection disconnected"); 
     process.exit(0); 
    }); 
}; 

module.exports.lockRessource = function(ressource_id,callback){ 
    redlock.lock(ressource_id,2000,function(err,lock){ 
     if(err){ 
      callback(err,null); 
     } 
     else{ 
      callback(null,lock); 
     } 
    }); 
}; 

module.exports.unlockLock = function(lock,callback){ 

    lock.unlock(function(err){ 
     if(err){ 
      callback(true,null); 
     } 
     else{ 
      callback(null,true); 
     } 
    }); 
}; 

Wenn Sie dieses Modul verwenden möchten, zunächst redisConnection nennen.
Angenommen, der Name der Datei oben lautet "redlock.js".

resource = require('./redlock.js') 

resource.redisConnection(6379, "127.0.0.1") 
resource.lockRessource("your resourceId", function(err, lock) { })