-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdb.js
139 lines (126 loc) · 3.82 KB
/
db.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
try{
var mongo = require('mongodb');
}catch(E){
console.log("error - mongodb not found");
console.log("download from here - https://github.com/christkv/node-mongodb-native")
process.exit(1);
}
var config = require("./config");
/**
* zipdb
*
* Sisaldab avalikke meetodeid andmete salvestamiseks baasi
**/
/**
* zipdb.db_connection -> Object
*
* Hoiab endas viidet andmebaasiühenduse juurde. Saab tekitada
* funktsiooniga open_db
**/
exports.db_connection = false;
/*
* Määrab ära ühenduse seaded ja salvestab need muutujasse db
*/
var db = new mongo.Db(
config.db.name, // db name
new mongo.Server(
config.db.host, // server
config.db.port || mongo.Connection.DEFAULT_PORT, //port
{auto_reconnect: true}
));
// Ava andmebaas
var db_open_queue = [];
open_db(function(){}, function(){});
/**
* open_db(callback, error_callback) -> undefined
* - callback (Function): funktsioon mis käivitada peale andmebaasi avamist
* - error_callback (Function): käivita kui avamine ei õnnestunud
*
* Avab andmebaasi toiminguteks ja salvestab pointeri muutujasse
* exports.db_connection
**/
function open_db(callback, error_callback){
// console.log("OPEN DB");
if(db_open_queue.length){
db_open_queue.unshift([callback, error_callback]);
return;
}
db_open_queue.unshift([callback, error_callback]);
db.open(function(error, db){
if(error){
// console.log("DB ERROR");
// console.log(error);
while(db_open_queue.length){
db_open_queue.pop()[1](error, null);
}
error_callback(error, null);
}
// console.log("DB OPEN OK");
exports.db_connection = db;
while(db_open_queue.length){
db_open_queue.pop()[0]();
}
});
}
/**
* zipdb.createCollection(callback) -> undefined
* - callback (Function): tagasikutsefunktsioon
*
* Loob andmebaasi tabeli
**/
exports.createCollection = function(callback){
if(!exports.db_connection){
return open_db(exports.createCollection.bind(exports, callback), callback);
}
db.createCollection(config.db.table, callback);
}
/**
* zipdb.initCollection(callback) -> undefined
* - callback (Function): tagasikutsefunktsioon
*
* Tagab et andmebaas on avatud ning tabel on olemas
**/
exports.initCollection = function(callback){
if(!exports.db_connection){
return open_db(exports.initCollection.bind(exports, callback), callback);
}
db.dropCollection(config.db.table, function(error){
if(error)return callback && callback(error, null);
exports.createCollection(callback)
// console.log("COLLECTION DROPPED")
});
}
/**
* zipdb.save(doc, callback) -> undefined
* - doc (Object): Salvestatavad andmed
* - callback (Function): käivitatakse kui on error või salvestamine õnnestub
* parameetriteks error, success
*
* Salvestab andmed baasi
**/
exports.save = function(doc, callback){
if(!exports.db_connection){
return open_db(exports.save.bind(exports, data, callback), callback);
}
db.createCollection(config.db.table, function(error, collection){
if(error){
// console.log("COLLECTION ERROR")
// console.log(error);
return callback(error, null);
}
// console.log("COLLECTION SELECT OK");
// console.log("INSERT")
collection.insert(doc, function(error, docs){
if(error){
// console.log("INSERT ERROR")
// console.log(error);
return callback && callback(error, null);
}
// console.log("INSERT DOCUMENT OK")
callback && callback(null, true);
});
});
}
exports.getCollection = function(callback){
exports.createCollection(callback);
}