/
database.js
75 lines (63 loc) · 1.88 KB
/
database.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var utils = require("./utils");
var config = require("./config");
var pgp = require("node-pgp");
var pgKeyring = require("node-pgp-postgres");
var pgKeyringDatabase = require("node-pgp-postgres/lib/database");
var pgKeyringStructure = require("node-pgp-postgres/lib/structure");
var async = require("async");
var fs = require("fs");
function initialise(callback) {
async.series([
async.apply(pgKeyring.initialiseDatabase, config.db),
function(next) {
fs.readFile(__dirname+"/database.sql", "utf8", function(err, queries) {
if(err)
return next(err);
getConnection(function(err, con) {
if(err)
return callback(err);
pgKeyringStructure._createStructure(con, queries, function(err) {
con.done();
next(err);
});
});
});
}
], callback);
}
function getConnection(callback) {
pgKeyringDatabase.getConnection(config.db, callback);
}
function _getConnections() {
return pgKeyringDatabase._getConnections();
}
function middleware(req, res, next) {
getConnection(function(err, con) {
if(err)
return next(err);
req.dbCon = con;
var endBkp = res.end;
res.end = function() {
con.done();
endBkp.apply(this, arguments);
};
next();
});
}
function getUniqueRandomString(con, length, table, field, callback) {
var randomStr = pgp.utils.generateRandomString(length).toLowerCase();
con.query("SELECT "+field+" FROM "+table+" WHERE "+field+" = $1 LIMIT 1", [ randomStr ], function(err, res) {
if(err)
callback(err);
else if(res.length > 0)
getUniqueRandomString(con, length, table, field, callback);
else
callback(null, randomStr);
});
}
module.exports = utils.extend({ }, pgKeyringDatabase);
module.exports.initialise = initialise;
module.exports.getConnection = getConnection;
module.exports.middleware = middleware;
module.exports.getUniqueRandomString = getUniqueRandomString;
module.exports._getConnections = _getConnections;