프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / CMS / dbCenter.js @ 24

이력 | 보기 | 이력해설 | 다운로드 (11.3 KB)

1 24 HKM
/*
2
    TODO
3
    * 스키마 정의 함수 제작
4
    *
5

6
*/
7
8
var mongoose = require('mongoose');
9
var fs = require('fs');
10
var mongod = require('mongod');
11
12
13
14
15
// Client 스키마 정의
16
var clientSchema = mongoose.Schema({
17
18
    _ip: String,
19
    _mac: String,
20
21
    _registerd: String
22
});
23
24
var ClientModel;
25
26
27
var dbCenter = {};
28
29
30
31
var MongoClient = require('mongodb').MongoClient;
32
33
var urlgogo = "mongodb://localhost:27017/mydb";
34
35
// ▼ DB 접속 관련 함수 ▼//////////////////////////////////////////////////////////////////////////////////////////////////////////
36
37
// DB 를 Create 해준다.
38
dbCenter.createDB = function (url, callback){
39
    MongoClient.connect(urlgogo, function(err, db){
40
       if( err ){
41
           callback(err);
42
           throw err;
43
       } else {
44
           console.log("Database Created");
45
           db.close();
46
       }
47
    });
48
}
49
50
// cmd 에서 mongod 설정해주지 않는 역할을 한다.
51
// db 에 연결한다.
52
dbCenter.db_Open = function(callback){
53
    console.log('[dbCenter] db_Open 호출');
54
    var server = new mongod({
55
    dbpath:'/Users/spboy/CMS/clients',
56
    port:27017});
57
58
    server.open((err) => {
59
       if(err) {
60
           console.log('[dbCenter][db_Open] err : ' + err.toString());
61
           callback(err);
62
       } else {
63
           console.log('[dbCenter][db_Open] dbServer opened');
64
           callback();
65
       }
66
    });
67
}
68
69
// Server 와 DB 를 연결해 준다.
70
dbCenter.db_Connect = function(callback){
71
    console.log('[dbCenter] db_Connect 호출');
72
    // DB 서버를 오픈한다.
73
    dbCenter.db_Open(function(err){
74
        if(err){
75
            callback(err);
76
            return;
77
        } else {
78
            var dbUrl = 'mongodb://localhost:27017/local';
79
            mongoose.Promise = global.Promise;
80
            mongoose.connect(dbUrl);
81
            database = mongoose.connection;
82
83
            database.on('open', function(){
84
                console.log('[dbCenter][db_Connect] 데이터베이스에 연결됨 : ' + dbUrl);
85
                UserSchema = clientSchema;
86
                console.log('[dbCenter][db_Connect] Client Schema 정의함.');
87
                ClientModel = mongoose.model('clients', UserSchema);
88
                saveData = new ClientModel();
89
                console.log('[dbCenter][db_Connect] ClientModel 정의함');
90
            });
91
92
            database.on('disconnected', function(){
93
                console.log('[dbCenter][db_Connect] 데이터베이스 연결 끊어짐.');
94
            });
95
96
            database.on('error', console.error.bind(console, 'mongoose connection error.'));
97
98
            callback(null);
99
        }
100
    });
101
}
102
103
// DB 에 연결이 되어 있는지 확인하고 되어 있지 않으면 연결해준다.
104
dbCenter.checkConnectDB = function(callback){
105
    console.log('[dbCenter] checkConnectDB 호출');
106
    if(UserModel){
107
        console.log('서버 연결이 이미 되어 있습니다.');
108
        callback('success');
109
    } else {
110
        dbCenter.connect(function(result){
111
            if(result == 'success'){
112
                console.log('서버 연결 성공');
113
                callback('success');
114
            } else {
115
                console.log('서버 연결 실패');
116
                callback('fail');
117
            }
118
        });
119
    }
120
};
121
// ▲ DB 접속 관련 함수 ▲//////////////////////////////////////////////////////////////////////////////////////////////////////////
122
123
// ▼ 데이터 관리 함수 ▼//////////////////////////////////////////////////////////////////////////////////////////////////////////
124
/*
125
    * 데이터 저장 순서 *
126
    1. data_set 으로 데이터를 셋팅해준다.
127
    2. data_Add 으로 데이터를 저장해준다.
128
*/
129
var saveData; // 정보를 모아서 저장할 객체
130
131
// 데이터 셋팅
132
// data : 저장하고자 하는 데이터의 json 형태
133
dbCenter.data_Set = function (data, callback){
134
    console.log('[dbCenter] data_Set 호출');
135
136
    // TODO : 클라이언트 모델만으로 정의 되어 있는데 다른 것으로 바뀌었을 경우에는 어떻게 할것인가?
137
    saveData = new ClientModel();
138
139
    // json 데이터의 위치에 맞게 넣어준다.
140
    try {
141
        saveData._ip = data.body._ip;
142
        saveData._mac = data.body._mac;
143
        saveData._registerd = data.body._registerd;
144
145
    } catch(err) {
146
        console.log('[dbCenter][data_Set] err : ' + err.toString());
147
        callback(err, null);
148
        return;
149
    }
150
151
    // 데이터 셋팅이 끝나면 중복검사를 해준다.
152
    dbCenter.data_Find(saveData,function(err, docs){
153
        if(err != null && docs == null){
154
            // 에러만이 존재한다.
155
            callback(err, null);
156
157
        } else if ( err == null && docs != null ) {
158
            // 찾고자 하는 데이터가 있다.
159
            callback(err, null);
160
161
        } else if ( err == null && docs == null ){
162
            // 찾고자하는 데이터가 없다.
163
            // 데이터 셋팅이 끝나게 되면 데이터를 저장해준다.
164
            dbCenter.data_Add(saveData, function(err){
165
                if(err){
166
167
                } else {
168
                    callback(null);
169
                }
170
            });
171
        }
172
    });
173
};
174
175
// 데이터 추가
176
// data : 저장하고자 하는 데이터 / mongoose.model 형태
177
dbCenter.data_Add = function(data, callback){
178
    console.log('[dbCenter] data_Add 호출');
179
180
    data.save(function(err){
181
        if(err){
182
            console.log('[dbCenter][data_Add] err : ' + err.toString());
183
            callback(err);
184
            return;
185
        } else {
186
            console.log('[dbCenter][data_Add] 사용자 데이터 추가함.');
187
            callback(null);
188
        }
189
    });
190
};
191
192
// 검색 기능
193
dbCenter.data_Find = function(req, callback){
194
    console.log('[dbCenter] data_Find 호출');
195
196
    // _id 를 기준으로 찾아옵니다. _id는 몽고디비에서 설정해 주는 유니크한 값입니다.
197
    ClientModel.find({"_mac": req._mac}, function(err, docs){
198
        if(err){
199
            console.log("[dbCenter][data_Find] err : " + err.toString());
200
            callback(err, null);
201
            return;
202
        }
203
204
        if(docs.length > 0){
205
            console.log('[dbCenter][data_Find] 찾았습니다. : \n' + docs);
206
            callback(null, docs);
207
        }else{
208
            console.log('[dbCenter][data_Find] 찾지 못했습니다');
209
            callback(null, null);
210
        }
211
    });
212
};
213
214
// 모든 데이터 가져오기
215
dbCenter.data_All = function(callback){
216
    console.log('[dbCenter] data_All 호출');
217
218
    // ClientModel 에서 모든걸 다 가져온다.
219
    ClientModel.find({}, function(err, users){
220
        if(err){
221
            console.log('[dbCenter][data_All] err : ' + err.toString());
222
            callback(err, null);
223
        } else {
224
            console.log('[dbCenter][data_All] 데이터 전송 완료');
225
            callback(null, users);
226
        }
227
    });
228
};
229
230
// ▲ 데이터 관리 함수 ▲//////////////////////////////////////////////////////////////////////////////////////////////////////////
231
232
233
234
235
// 메인 이미지 url 설정
236
dbCenter.setMainImageUrl = function(data, callback){
237
    console.log('[connectDB] setMainImageUrl 호출');
238
    try{
239
        saveData._mainimg = data;
240
        callback(null);
241
    } catch (err){
242
        callback(err);
243
    }
244
};
245
// 콘탠츠 이미지 rul 설정
246
dbCenter.setContentsUrl = function(type, url,  callback){
247
    console.log('[connectDB] setContentsUrl 호출');
248
    try{
249
        var content = {"_type":type, "_url":url}
250
251
        console.log(JSON.stringify(content));
252
253
        saveData._contents.push(content);
254
        callback(null);
255
    } catch (err){
256
        callback(err);
257
    }
258
};
259
260
261
// 삭제
262
dbCenter.deleteData = function(data, callback){
263
    console.log('[connectDB] deleteData 호출');
264
265
    for( var cnt = 0 ; cnt < data.length; cnt++)
266
    {
267
    // 1. 메인 이미지를 삭제해준다.
268
        var mainImageUrl = data[cnt]._mainimg;
269
270
        fs.unlink(mainImageUrl, function(err){
271
            if(err){
272
                console.log('mainImage 삭제 실패 : ' + err.toString());
273
            } else {
274
                console.log('mainImage 삭제 성공');
275
            }
276
        });
277
278
        // 2. 콘탠츠 이미지를 삭제해준다.
279
        for(var i = 0; i< data[cnt]._contents.length; i++)
280
        {
281
            var url = data[cnt]._contents[i]._url;
282
283
            fs.unlink(url, function(err){
284
                if(err){
285
                    console.log('contents 삭제 실패 : ' + err.toString());
286
                } else {
287
                    console.log('contents 삭제 성공');
288
                }
289
            });
290
        }
291
292
        // 데이터에서 삭제해준다.
293
        UserModel.remove({"_id": data[cnt]._id}, function(err, docs){
294
            if(err){
295
                callback(err, null);
296
            }else{
297
                callback(null, docs);
298
            }
299
        });
300
    }
301
};
302
303
304
var tmpModifyData;
305
var orgModifyData;
306
307
// 데이터 수정하기
308
dbCenter.modifyData = function(org, dst, callback){
309
    console.log('[connectDB] modifyData 호출');
310
311
    tmpModifyData = org[0];
312
    orgModifyData = org[0];
313
    tmpModifyData._contents = [];
314
    //org[0]._title_kr  = dst.body._title_kr;
315
316
    callback(null, null);
317
318
};
319
320
// 메인 이미지 url 설정
321
dbCenter.setModifyMainImageUrl = function(data, callback){
322
    console.log('[connectDB] setModifyMainImageUrl 호출');
323
    try{
324
        tmpModifyData._mainimg = data;
325
        callback(null, tmpModifyData);
326
    } catch (err){
327
        callback(err, null);
328
    }
329
};
330
// 콘탠츠 이미지 rul 설정
331
dbCenter.seModifytContentsUrl = function(type, url,  callback){
332
    console.log('[connectDB] seModifytContentsUrl 호출');
333
    try{
334
        var content = {"_type":type, "_url":url}
335
336
        console.log(JSON.stringify(content));
337
338
        tmpModifyData._contents.push(content);
339
        callback(null);
340
    } catch (err){
341
        callback(err);
342
    }
343
};
344
345
dbCenter.dataModifyInDB = function(callback){
346
      UserModel.where({_id : tmpModifyData._id}).update(tmpModifyData, function(err, docs){
347
        if(err){
348
            callback(err, null);
349
        }else{
350
            // 1. 메인 이미지를 삭제해준다.
351
            var mainImageUrl = orgModifyData._mainimg;
352
353
            fs.unlink(mainImageUrl, function(err){
354
                if(err){
355
                    console.log('mainImage 삭제 실패 : ' + err.toString());
356
                } else {
357
                    console.log('mainImage 삭제 성공');
358
                }
359
            });
360
361
            // 2. 콘탠츠 이미지를 삭제해준다.
362
            for(var i = 0; i< orgModifyData._contents.length; i++)
363
            {
364
                var url = orgModifyData._contents[i]._url;
365
366
                fs.unlink(url, function(err){
367
                    if(err){
368
                        console.log('contents 삭제 실패 : ' + err.toString());
369
                    } else {
370
                        console.log('contents 삭제 성공');
371
                    }
372
                });
373
            }
374
            callback(null, docs);
375
        }
376
    });
377
}
378
379
380
381
382
module.exports = dbCenter;