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; |