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부분을 완공하였습니다. 이 부분의 코드 주소, 다운로드 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.