root / HServer / 00.Server / DB / dbCenter.js @ 37
이력 | 보기 | 이력해설 | 다운로드 (11.5 KB)
1 | 37 | HKM | 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; |