반응형
mongodb에 동기식으로 연결
저는 먼저 mongodb에 연결한 다음 제 애플리케이션에서 다른 모든 것을 실행하고 싶습니다.
그러기 위해서는 다음과 같은 것을 써야 합니다.
MongoClient.connect("mongodb://localhost/test", function(err, connection) {
if (err) { console.error(err); }
db = connection;
var app = express();
// Include API V1
require("./apiv1.js")(app, db);
app.listen(3000, function(err) {
if (err) { console.error(err); } else { console.log("Started on *:3000"); }
});
});
이렇게 하면 앱이 .connect 함수 안에서 완전히 들여쓰기됩니다.제가 프로젝트를 진행하는 동안 보기 흉하고 공간을 차지하는 것입니다.
제 생각에 가장 좋은 해결책은 MongoDB 연결을 동기화하는 것입니다(비록 제 앱이 DB 연결 없이는 작동할 수 없는데 왜 제가 연결되는 동안 무언가를 해야 합니까?). 그리고 나서 제 나머지 코드를 실행하는 것입니다.
어떻게 해야 할까?
MongoDB에 동시에 연결할 수는 없지만 코드에서 이 추악한 콜백을 제거할 수 있습니다.
가장 좋은 방법은 드라이버 주변의 포장지를 사용하는 것입니다.
다음 모듈을 살펴봅니다.
몽고즈
var mongojs = require('mongojs');
var db = mongojs('localhost/test');
var mycollection = db.collection('mycollection');
몽고스킨
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/test", {native_parser:true});
수도승
var monk = require('monk');
var db = monk('localhost/test');
var users = db.get('users')
물론 내부적으로는 모두 비동기식으로 MongoDB 연결을 설정하고 있습니다.
사용async라이브러리, 이러한 문제 중 일부를 해결할 수 있습니다.
예를 들어 서버 시작 시 다음 작업을 수행합니다.
async.series([
function(callback){
// Initialize the mongodb connection and callback on completion in init.
db.init(function(){
callback();
});
},
function(callback){
// Listen on requests etc.
webServer.init(function(){
callback();
});
},
function(callback){
// Set up anything else that I need
callback();
}
]);
Node 6 이상 버전을 사용하는 경우 다음과 같은 작업을 수행할 수 있습니다.
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017/mydb';
let db = null;
getdb();
//your code
async function getdb() {
db = await MongoClient.connect(url);
}
- mongodb 라이브러리를 가져옵니다.
- URL을 상수로 선언합니다.
- 변수 db를 null로 선언합니다.
- getdb 함수를 호출합니다.
- 비동기 단어가 처음인 getdb 함수를 생성합니다.
- 키워드가 대기하는 연결 결과를 DB 변수에 할당합니다.
Tunky, Tunky를 사용하면 비동기 함수를 한 번 실행하고 캐시하면 이후 호출이 캐시에서 반환됩니다.
const MongoClient = require('mongodb').MongoClient;
const thunky = require('thunky');
var connect = thunky(function(cb){
let url = 'mongodb://localhost:27017/test';
MongoClient.connect(url, function(err, client){
console.log('connecting')
cb(err, client);
})
})
connect( (err, client) => {
console.log('connection 1')
})
connect( (err, client) => {
console.log('connection 2')
})
connect( (err, client) => {
console.log('connection 3')
console.log('closing')
client.close();
})
*참고: 최신 3.x mongodb 드라이버를 사용하고 있습니다.
언급URL : https://stackoverflow.com/questions/25908688/connect-synchronously-to-mongodb
반응형
'programing' 카테고리의 다른 글
| Excel: 수식을 255자보다 길게 사용 (0) | 2023.07.12 |
|---|---|
| Mongoid 해시 필드에 대한 쿼리 (0) | 2023.07.12 |
| MongoDB: 정적 값을 가진 $project 추가 필드를 집계합니다. (0) | 2023.07.12 |
| C 열거형 정의의 값에 Bitwise-Shift 연산자를 사용하는 이유는 무엇입니까? (0) | 2023.07.12 |
| dplyr을 사용한 여러 열의 합계 (0) | 2023.07.12 |