프로젝트

일반

사용자정보

통계
| 개정판:

hrz_sv / 00.Server / DB / dbCenter.js @ 37

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

1
var mongoose = require('mongoose');
2
var fs = require('fs');
3
var mongod = require('mongod');
4

    
5
var express = require('express');
6
var router = express.Router();
7

    
8
router.route('/DBtest').post(function(req, res){
9
    var str = req.body;
10
    console.log(str);
11

    
12
    res.send({'result':'success'});
13
    res.end();
14
});
15

    
16
// Client 스키마 정의
17
var clientSchema = mongoose.Schema({
18
    
19
    _ip: String,
20
    _mac: String,
21
    
22
    _registerd: String
23
});
24

    
25
var ClientModel;
26

    
27

    
28
var dbCenter = {};
29

    
30
var MongoClient = require('mongodb').MongoClient;
31

    
32
var urlgogo = "mongodb://localhost:27017/mydb";
33

    
34
// ▼ DB 접속 관련 함수 ▼//////////////////////////////////////////////////////////////////////////////////////////////////////////
35

    
36
// DB 를 Create 해준다.
37
dbCenter.createDB = function (url, callback){
38
    MongoClient.connect(urlgogo, function(err, db){
39
       if( err ){
40
           callback(err);
41
           throw err;
42
       } else {
43
           console.log("Database Created");
44
           db.close();
45
       }
46
    });
47
}
48
// cmd 에서 mongod 설정해주지 않는 역할을 한다.
49
// db 에 연결한다.
50
dbCenter.db_Open = function(url, callback){
51
    console.log('[dbCenter] db_Open 호출');
52
    var server = new mongod({
53
    dbpath:'/Users/spboy/CMS/clients',
54
    port:27017});
55
    
56
    server.open((err) => {
57
       if(err) {
58
           console.log('[dbCenter][db_Open] err : ' + err.toString());
59
           callback(err);
60
       } else {
61
           console.log('[dbCenter][db_Open] dbServer opened');
62
           callback();
63
       }
64
    });
65
}
66

    
67
// Server 와 DB 를 연결해 준다.
68
dbCenter.db_Connect = function(callback){
69
    console.log('[dbCenter] db_Connect 호출');
70
    // DB 서버를 오픈한다.
71
    dbCenter.db_Open(function(err){
72
        if(err){
73
            callback(err);
74
            return;
75
        } else {
76
            var dbUrl = 'mongodb://localhost:27017/local';
77
            mongoose.Promise = global.Promise;
78
            mongoose.connect(dbUrl);
79
            database = mongoose.connection;
80

    
81
            database.on('open', function(){
82
                console.log('[dbCenter][db_Connect] 데이터베이스에 연결됨 : ' + dbUrl);
83
                UserSchema = clientSchema;
84
                console.log('[dbCenter][db_Connect] Client Schema 정의함.');
85
                ClientModel = mongoose.model('clients', UserSchema);
86
                saveData = new ClientModel();
87
                console.log('[dbCenter][db_Connect] ClientModel 정의함');
88
            });   
89

    
90
            database.on('disconnected', function(){
91
                console.log('[dbCenter][db_Connect] 데이터베이스 연결 끊어짐.');
92
            });
93

    
94
            database.on('error', console.error.bind(console, 'mongoose connection error.'));
95
            
96
            callback(null);
97
        }
98
    });
99
}
100

    
101
// DB 에 연결이 되어 있는지 확인하고 되어 있지 않으면 연결해준다.
102
dbCenter.checkConnectDB = function(callback){
103
    console.log('[dbCenter] checkConnectDB 호출');
104
    if(UserModel){
105
        console.log('서버 연결이 이미 되어 있습니다.');
106
        callback('success');
107
    } else {
108
        dbCenter.connect(function(result){
109
            if(result == 'success'){
110
                console.log('서버 연결 성공');
111
                callback('success');
112
            } else {
113
                console.log('서버 연결 실패');
114
                callback('fail');
115
            }
116
        });
117
    }
118
};
119
// ▲ DB 접속 관련 함수 ▲//////////////////////////////////////////////////////////////////////////////////////////////////////////
120

    
121
// ▼ 데이터 관리 함수 ▼//////////////////////////////////////////////////////////////////////////////////////////////////////////
122
/*
123
    * 데이터 저장 순서 *
124
    1. data_set 으로 데이터를 셋팅해준다.
125
    2. data_Add 으로 데이터를 저장해준다.
126
*/
127
var saveData; // 정보를 모아서 저장할 객체
128

    
129
// 데이터 셋팅
130
// data : 저장하고자 하는 데이터의 json 형태
131
dbCenter.data_Set = function (data, callback){
132
    console.log('[dbCenter] data_Set 호출');
133
    
134
    // TODO : 클라이언트 모델만으로 정의 되어 있는데 다른 것으로 바뀌었을 경우에는 어떻게 할것인가?
135
    saveData = new ClientModel();
136
    
137
    // json 데이터의 위치에 맞게 넣어준다.
138
    try {
139
        saveData._ip = data.body._ip;
140
        saveData._mac = data.body._mac;
141
        saveData._registerd = data.body._registerd;
142

    
143
    } catch(err) {
144
        console.log('[dbCenter][data_Set] err : ' + err.toString());
145
        callback(err, null);
146
        return;
147
    }
148
    
149
    // 데이터 셋팅이 끝나면 중복검사를 해준다.
150
    dbCenter.data_Find(saveData,function(err, docs){
151
        if(err != null && docs == null){
152
            // 에러만이 존재한다.
153
            callback(err, null);
154
            
155
        } else if ( err == null && docs != null ) {
156
            // 찾고자 하는 데이터가 있다.
157
            callback(err, null);
158
            
159
        } else if ( err == null && docs == null ){
160
            // 찾고자하는 데이터가 없다.
161
            // 데이터 셋팅이 끝나게 되면 데이터를 저장해준다.
162
            dbCenter.data_Add(saveData, function(err){
163
                if(err){
164

    
165
                } else {
166
                    callback(null);
167
                }
168
            });
169
        }
170
    });
171
};
172

    
173
// 데이터 추가
174
// data : 저장하고자 하는 데이터 / mongoose.model 형태
175
dbCenter.data_Add = function(data, callback){
176
    console.log('[dbCenter] data_Add 호출');
177
    
178
    data.save(function(err){
179
        if(err){
180
            console.log('[dbCenter][data_Add] err : ' + err.toString());
181
            callback(err);
182
            return;
183
        } else {
184
            console.log('[dbCenter][data_Add] 사용자 데이터 추가함.');
185
            callback(null);
186
        }
187
    });
188
};
189

    
190
// 검색 기능
191
dbCenter.data_Find = function(req, callback){
192
    console.log('[dbCenter] data_Find 호출');
193
    
194
    // _id 를 기준으로 찾아옵니다. _id는 몽고디비에서 설정해 주는 유니크한 값입니다.
195
    ClientModel.find({"_mac": req._mac}, function(err, docs){
196
        if(err){
197
            console.log("[dbCenter][data_Find] err : " + err.toString());
198
            callback(err, null);
199
            return;
200
        }
201
        
202
        if(docs.length > 0){
203
            console.log('[dbCenter][data_Find] 찾았습니다. : \n' + docs);
204
            callback(null, docs);
205
        }else{
206
            console.log('[dbCenter][data_Find] 찾지 못했습니다');
207
            callback(null, null);
208
        }
209
    });
210
};
211

    
212
// 모든 데이터 가져오기
213
dbCenter.data_All = function(callback){
214
    console.log('[dbCenter] data_All 호출');
215
    
216
    // ClientModel 에서 모든걸 다 가져온다.
217
    ClientModel.find({}, function(err, users){
218
        if(err){
219
            console.log('[dbCenter][data_All] err : ' + err.toString());
220
            callback(err, null);
221
        } else {
222
            console.log('[dbCenter][data_All] 데이터 전송 완료');
223
            callback(null, users);
224
        }
225
    });   
226
};
227

    
228
// ▲ 데이터 관리 함수 ▲//////////////////////////////////////////////////////////////////////////////////////////////////////////
229

    
230

    
231

    
232

    
233
// 메인 이미지 url 설정
234
dbCenter.setMainImageUrl = function(data, callback){
235
    console.log('[connectDB] setMainImageUrl 호출');
236
    try{
237
        saveData._mainimg = data;
238
        callback(null);
239
    } catch (err){
240
        callback(err);
241
    }
242
};
243
// 콘탠츠 이미지 rul 설정
244
dbCenter.setContentsUrl = function(type, url,  callback){
245
    console.log('[connectDB] setContentsUrl 호출');
246
    try{
247
        var content = {"_type":type, "_url":url}
248

    
249
        console.log(JSON.stringify(content));
250
        
251
        saveData._contents.push(content);
252
        callback(null);
253
    } catch (err){
254
        callback(err);
255
    }
256
};
257

    
258

    
259
// 삭제
260
dbCenter.deleteData = function(data, callback){
261
    console.log('[connectDB] deleteData 호출');
262
    
263
    for( var cnt = 0 ; cnt < data.length; cnt++)
264
    {
265
    // 1. 메인 이미지를 삭제해준다.
266
        var mainImageUrl = data[cnt]._mainimg;
267

    
268
        fs.unlink(mainImageUrl, function(err){
269
            if(err){
270
                console.log('mainImage 삭제 실패 : ' + err.toString());
271
            } else {
272
                console.log('mainImage 삭제 성공');
273
            }
274
        });
275

    
276
        // 2. 콘탠츠 이미지를 삭제해준다.
277
        for(var i = 0; i< data[cnt]._contents.length; i++)
278
        {
279
            var url = data[cnt]._contents[i]._url;
280

    
281
            fs.unlink(url, function(err){
282
                if(err){
283
                    console.log('contents 삭제 실패 : ' + err.toString());
284
                } else {
285
                    console.log('contents 삭제 성공');
286
                }
287
            });
288
        }
289

    
290
        // 데이터에서 삭제해준다.
291
        UserModel.remove({"_id": data[cnt]._id}, function(err, docs){
292
            if(err){
293
                callback(err, null);
294
            }else{
295
                callback(null, docs);
296
            }
297
        });
298
    }
299
};
300

    
301

    
302
var tmpModifyData;
303
var orgModifyData;
304

    
305
// 데이터 수정하기
306
dbCenter.modifyData = function(org, dst, callback){
307
    console.log('[connectDB] modifyData 호출');
308

    
309
    tmpModifyData = org[0];
310
    orgModifyData = org[0];
311
    tmpModifyData._contents = [];
312
    //org[0]._title_kr  = dst.body._title_kr;
313
    
314
    callback(null, null);
315
    
316
};
317

    
318
// 메인 이미지 url 설정
319
dbCenter.setModifyMainImageUrl = function(data, callback){
320
    console.log('[connectDB] setModifyMainImageUrl 호출');
321
    try{
322
        tmpModifyData._mainimg = data;
323
        callback(null, tmpModifyData);
324
    } catch (err){
325
        callback(err, null);
326
    }
327
};
328
// 콘탠츠 이미지 rul 설정
329
dbCenter.seModifytContentsUrl = function(type, url,  callback){
330
    console.log('[connectDB] seModifytContentsUrl 호출');
331
    try{
332
        var content = {"_type":type, "_url":url}
333

    
334
        console.log(JSON.stringify(content));
335
        
336
        tmpModifyData._contents.push(content);
337
        callback(null);
338
    } catch (err){
339
        callback(err);
340
    }
341
};
342

    
343
dbCenter.dataModifyInDB = function(callback){
344
      UserModel.where({_id : tmpModifyData._id}).update(tmpModifyData, function(err, docs){
345
        if(err){
346
            callback(err, null);
347
        }else{
348
            // 1. 메인 이미지를 삭제해준다.
349
            var mainImageUrl = orgModifyData._mainimg;
350

    
351
            fs.unlink(mainImageUrl, function(err){
352
                if(err){
353
                    console.log('mainImage 삭제 실패 : ' + err.toString());
354
                } else {
355
                    console.log('mainImage 삭제 성공');
356
                }
357
            });
358

    
359
            // 2. 콘탠츠 이미지를 삭제해준다.
360
            for(var i = 0; i< orgModifyData._contents.length; i++)
361
            {
362
                var url = orgModifyData._contents[i]._url;
363

    
364
                fs.unlink(url, function(err){
365
                    if(err){
366
                        console.log('contents 삭제 실패 : ' + err.toString());
367
                    } else {
368
                        console.log('contents 삭제 성공');
369
                    }
370
                });
371
            }
372
            callback(null, docs);
373
        }
374
    });
375
}
376

    
377
exports.default = router;
378

    
379
//module.exports = dbCenter;