parent
4870158430
commit
447d0aae76
1 changed files with 74 additions and 0 deletions
@ -0,0 +1,74 @@ |
||||
/*global require,module,process*/ |
||||
|
||||
var postgres = require('pg'); |
||||
var winston = require('winston'); |
||||
|
||||
(function () { |
||||
|
||||
'use strict'; |
||||
|
||||
// A postgres document store
|
||||
var PostgresDocumentStore = function (options) { |
||||
this.expireJS = options.expire * 1000; |
||||
this.connectionString = process.env.DATABASE_URL; |
||||
}; |
||||
|
||||
PostgresDocumentStore.prototype = { |
||||
|
||||
// Set a given key
|
||||
set: function (key, data, callback, skipExpire) { |
||||
var now = new Date().getTime() / 1000; |
||||
var that = this; |
||||
this.safeConnect(function (err, client, done) { |
||||
if (err) { return callback(false); } |
||||
client.query('INSERT INTO entries (key, value, expiration) VALUES ($1, $2, $3)', [ |
||||
key, |
||||
data, |
||||
that.expireJS && !skipExpire ? now + that.expireJS : null |
||||
], function (err, result) { |
||||
if (err) { |
||||
winston.error('error persisting value to postgres', { error: err }); |
||||
return callback(false); |
||||
} |
||||
callback(true); |
||||
done(); |
||||
}); |
||||
}); |
||||
}, |
||||
|
||||
// Get a given key's data
|
||||
get: function (key, callback, skipExpire) { |
||||
var now = new Date().getTime() / 1000; |
||||
var that = this; |
||||
this.safeConnect(function (err, client, done) { |
||||
if (err) { return callback(false); } |
||||
client.query('SELECT value from entries where KEY = $1 AND (expiration IS NULL or expiration < $2)', [ |
||||
key, |
||||
that.expireJS ? now - that.expireJS : 0 |
||||
], function (err, result) { |
||||
if (err) { |
||||
winston.error('error retrieving value from postgres', { error: err }); |
||||
return callback(false); |
||||
} |
||||
callback(result.rows.length ? result.rows[0].value : false); |
||||
}); |
||||
}); |
||||
}, |
||||
|
||||
// A connection wrapper
|
||||
safeConnect: function (callback) { |
||||
postgres.connect(this.connectionString, function (err, client, done) { |
||||
if (err) { |
||||
winston.error('error connecting to postgres', { error: err }); |
||||
callback(err); |
||||
} else { |
||||
callback(undefined, client, done); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
}; |
||||
|
||||
module.export = PostgresDocumentStore; |
||||
|
||||
}()); |
Loading…
Reference in new issue