Node.js가 MongodB의 작업에 대한 DAO 봉인

Node.js가 MongodB의 작업에 대한 DAO 봉인
아래의 코드를 보기 전에 이것을 읽으셨으면 좋겠습니다. 읽은 후에 제 아래의 코드들의 전체적인 사상을 알게 될 것입니다.
우선, 다음은 코드의 대체적인 모습이다
var mongoClient = require('mongodb').MongoClient;

function MongoDB(url) {
...
}
...

MongoDB.prototype.insert = function() { ...}

  ...

module.exports = MongoDB;

나는 모듈을 통과했다.exports에서 '클래스' (함수) 를 내보낸 다음에 이 함수에 원형 방법을 추가했습니다. 그리고 저는 connect 함수를 만들었습니다. 이 함수의 역할은 데이터베이스를 연결하는 것입니다.
//    (      )
MongoDB.prototype.insert = function(collectionName, data) {
        if(!typeof collectionName == 'string' || !typeof data == 'object') {
                throw new Error('            ');
        }

        connect(this.url, function(err, db) {
          if(Array.isArray(data)) {
                  db.collection(collectionName).insertMany(data).then(function(result) {
                          if(result) {
                                  console.log('        ');
                          }else {
                                  console.log('        ');
                          }
                  });
          }else {
                  db.collection(collectionName).insertOne(data).then(function(result) {
                          if(result) {
                                  console.log('        ');
                          }else {
                                  console.log('        ');
                          }
                  });
          }
        });
}

앞에서 내가 쓴 것처럼 나는 connect에게 이 함수에 리셋 함수를 전달했다. 데이터베이스를 열 때 진정한 삽입 조작을 호출한다.
function connect(url, callback) {
        if(!url) {
                throw new Error('url     ');
                return;
        }

        mongoClient.connect(url, function(err, db) {
                callback(err, db);

                db.close();
        });
}

이렇게 하는 목적은 여러 번 시도한 선택 때문이다.Node에서.js가 입출력 작업을 할 때 비동기적이다. 처음에 내가 생각한 것은 MongoDB이라는 구조 함수에 this.db = null을 첨가한 다음에 원형 방법인 connect을 호출했다. 연결을 열 때 this.db에 값을 부여했다. 그 결과 실천에서 this.db은 시종null이기 때문에 다른 원형 방법은 성공적으로 호출되지 못했다.그래서 원형 방법이 아닌 단독 connect이라는 함수를 썼다.
전체 코드는 다음과 같습니다.
var mongoClient = require('mongodb').MongoClient;


function MongoDB(url) {
        this.url = url;
        this.db = null;
}

//  
function connect(url, callback) {
        if(!url) {
                throw new Error('url     ');
                return;
        }

        mongoClient.connect(url, function(err, db) {
                callback(err, db);

                db.close();
        });
}

//    (      )
MongoDB.prototype.insert = function(collectionName, data) {
        if(!typeof collectionName == 'string' || !typeof data == 'object') {
                throw new Error('            ');
        }

        connect(this.url, function(err, db) {
        if(Array.isArray(data)) {
                db.collection(collectionName).insertMany(data).then(function(result) {
                        if(result) {
                                console.log('        ');
                        }else {
                                console.log('        ');
                        }
                });
        }else {
                db.collection(collectionName).insertOne(data).then(function(result) {
                        if(result) {
                                console.log('        ');
                        }else {
                                console.log('        ');
                        }
                });
        }
        });
}

//    (falg=true     ,flag=false     )
MongoDB.prototype.update = function(flag, collectionName, condition, data) {
        if(typeof collectionName != 'string') {
                throw new Error('            ');
        }

        connect(this.url, function(err, db) {

        if(flag) {
                db.collection(collectionName).updateOne(condition, data).then(function(result) {
                        console.log('    ');
                });
        }else {
                db.collection(collectionName).updateMany(condition, data).then(function(result) {
                        console.log('    ');
                });
        }
        });
}

//    (falg=true     ,flag=false     )
MongoDB.prototype.delete = function(flag, collectionName, condition) {
        if(arguments.length != 3) {
                throw new Error('      3 ');
        }

        connect(this.url, function(err, db) {

        if(flag) {
                db.collection(collectionName).deleteOne(condition).then(function(result) {
                        console.log("        ");
                })
        }else {
                db.collection(collectionName).deleteMany(condition).then(function(result) {
                        console.log("        ");
                })
        }
        });
}

//           ,           
MongoDB.prototype.find = function(collectionName, condition, callback) {
        var result;
        if(arguments.length != 3) {
            throw new Error('         ');
        }
       connect(this.url, function(err, db) {
        var cursor = db.collection(collectionName).find(condition);

        cursor.each(function(err, doc) {
            if(err) {
                callback(err, null);
            }
            if(doc != null) {
                result.push(doc);
            }else {
                callback(null, result);
            }
        })
       });
}

module.exports = MongoDB;

오늘 이미 어제 미완공된find부분을 완공하였습니다. 이 부분의 코드 주소, 다운로드 주소

좋은 웹페이지 즐겨찾기