복붙노트

[MONGODB] 어떻게 Node.js를에 약속 MongoDB를 사용 하는가?

MONGODB

어떻게 Node.js를에 약속 MongoDB를 사용 하는가?

나는 Node.js를 함께하여 MongoDB를 사용하여 문서에서 제안 된 방법은 사용 콜백을 것 같다하는 방법을 발견하기 위해 노력했습니다. 지금, 나는 그냥 취향의 문제 것을 알고,하지만 난 정말 약속을 사용하여 선호합니다.

문제는 내가 MongoDB를 함께 사용하는 방법을 찾지 못한 것입니다. 사실, 나는 다음을 시도했다 :

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost:27017/example';

MongoClient.connect(url).then(function (err, db) {
    console.log(db);
});

그리고 그 결과는 정의되지 않는다. 이 경우 그렇게 할 수있는 방법이 아니다 보인다.

약속 대신 콜백 노드 내부에 몽고 DB를 사용하는 방법은 없나요?

해결법

  1. ==============================

    1.당신의 접근 방식은, 당신의 인수 단지 작은 실수 거의 정확

    당신의 접근 방식은, 당신의 인수 단지 작은 실수 거의 정확

    var MongoClient = require('mongodb').MongoClient
    var url = 'mongodb://localhost:27017/example'
    MongoClient.connect(url)
      .then(function (db) { // <- db as first argument
        console.log(db)
      })
      .catch(function (err) {})
    
  2. ==============================

    2.블루 버드 또는 q 또는 다른 멋진 라이브러리없이이 작업을 수행하는 방법을 언급 위의 답변 없음 때문에, 내가이 내 2 센트를 추가 할 수 있습니다.

    블루 버드 또는 q 또는 다른 멋진 라이브러리없이이 작업을 수행하는 방법을 언급 위의 답변 없음 때문에, 내가이 내 2 센트를 추가 할 수 있습니다.

    다음은 기본 ES6의 약속에 삽입 할 방법

        'use strict';
    
    const
        constants = require('../core/constants'),
        mongoClient = require('mongodb').MongoClient;
    
    
    
    function open(){
    
        // Connection URL. This is where your mongodb server is running.
        let url = constants.MONGODB_URI;
        return new Promise((resolve, reject)=>{
            // Use connect method to connect to the Server
            mongoClient.connect(url, (err, db) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(db);
                }
            });
        });
    }
    
    function close(db){
        //Close connection
        if(db){
            db.close();
        }
    }
    
    let db = {
        open : open,
        close: close
    }
    
    module.exports = db;
    

    나는 약속을 반환하는 하나 내 open () 메서드를 정의했다. 삽입을 수행하려면, 여기 내 코드는 아래 니펫

    function insert(object){
        let database = null;
        zenodb.open()
        .then((db)=>{
            database = db;
            return db.collection('users')    
        })
        .then((users)=>{
            return users.insert(object)
        })
        .then((result)=>{
            console.log(result);
            database.close();
        })
        .catch((err)=>{
            console.error(err)
        })
    }
    
    
    
    insert({name: 'Gary Oblanka', age: 22});
    

    희망이 도움이. 당신이 더 잘 만들기 위해 어떤 제안이 있다면, 나 자신을 개선하기 위해 기꺼이으로 알려 않습니다 :)

  3. ==============================

    3.이 Node.js를에 약속하여 MongoDB를 사용하는 방법에 대한 일반의 대답은?

    이 Node.js를에 약속하여 MongoDB를 사용하는 방법에 대한 일반의 대답은?

    약속으로 변환하기 전에

    var MongoClient = require('mongodb').MongoClient,
    dbUrl = 'mongodb://db1.example.net:27017';
    
    MongoClient.connect(dbUrl,function (err, db) {
        if (err) throw err
        else{
            db.collection("users").findOne({},function(err, data) {
                console.log(data)
            });
        }
    })
    

    약속을 변환 한 후

    //converted
    MongoClient.connect(dbUrl).then(function (db) {
        //converted
        db.collection("users").findOne({}).then(function(data) {
             console.log(data)
        }).catch(function (err) {//failure callback
             console.log(err)
        });
    }).catch(function (err) {})
    

    여러 요청을 처리 할 필요 넣다

    MongoClient.connect(dbUrl).then(function (db) {
    
       /*---------------------------------------------------------------*/
    
        var allDbRequest = [];
        allDbRequest.push(db.collection("users").findOne({}));
        allDbRequest.push(db.collection("location").findOne({}));
        Promise.all(allDbRequest).then(function (results) {
            console.log(results);//result will be array which contains each promise response
        }).catch(function (err) {
             console.log(err)//failure callback(if any one request got rejected)
        });
    
       /*---------------------------------------------------------------*/
    
    }).catch(function (err) {})
    
  4. ==============================

    4.또한 비동기 / await를 할 수

    또한 비동기 / await를 할 수

    메인 비동기 함수 () {  클라이언트, DB를 보자;  시험{     클라이언트 =이 MongoClient.connect (mongoUrl, {useNewUrlParser : 사실을}) 기다리고 있습니다;     dB = client.db (DBNAME);     하자 dCollection = db.collection ( 'collectionName 사용');     () = AWAIT dCollection.find 결과하자;     () 결과 = await를 dCollection.countDocuments하자 //;     // 다른 코드 ....     result.toArray ()를 호출;  }  캐치 (ERR) {console.error (ERR); } 여기있는 몽고의 오류를 잡아 //  마지막 () {client.close; } // 있는지 확인 후 연결을 닫습니다 }

  5. ==============================

    5.편집 경고 :

    편집 경고 :

    존 Culviner가 언급 한 바와 같이,이 답변은되지 않습니다. 드라이버를 사용하여, 그것은 약속의 OOTB와 함께 제공됩니다.

    당신이 약속 라이브러리로 블루 버드 사용하도록 선택하는 경우, 당신은 MongoClient에 파랑새 promisifyAll () 함수를 사용할 수 있습니다 :

    var Promise = require('bluebird');
    var MongoClient = Promise.promisifyAll(require('mongodb').MongoClient);
    
    var url = 'mongodb://localhost:27017/example';
    
    MongoClient.connectAsync(url).then(function (db) {
        console.log(db);
    }).catch(function(err){
        //handle error
        console.log(err);
    });
    
  6. ==============================

    6.MongoDB의 버전과 작동 솔루션> 3.0

    MongoDB의 버전과 작동 솔루션> 3.0

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    
    open = (url) => {
        return new Promise((resolve,reject) => {
            MongoClient.connect(url, (err,client) => { //Use "client" insted of "db" in the new MongoDB version
                if (err) {
                    reject(err)
                } else {
                    resolve({
                        client
                    });
                };
            });
        });
    };
    
    create = (client) => {
        return new Promise((resolve,reject) => {
            db = client.db("myFirstCollection"); //Get the "db" variable from "client"
            db.collection("myFirstCollection").insertOne({
                name: 'firstObjectName',
                location: 'London'
                }, (err,result)=> {
                    if(err){reject(err)}
                    else {
                        resolve({
                            id: result.ops[0]._id, //Add more variables if you want
                            client
                        });
                    }
    
                });
        });
    };
    
    close = (client) => {
        return new Promise((resolve,reject) => {
            resolve(client.close());
        })
    
    };
    
    open(url)
        .then((c) => {
            clientvar = c.client;
            return create(clientvar)
        }).then((i) => {
            idvar= i.id;
            console.log('New Object ID:',idvar) // Print the ID of the newly created object
            cvar = i.client
            return close(cvar)
        }).catch((err) => {
            console.log(err)
        })
    
  7. ==============================

    7.당신도 같은 MongoDB를-약속으로, 다른 패키지를 사용하거나 주위에 또는 bluebird.promisify 같은 약속 유틸리티 패키지를 통해 자신의 약속을 구축하여 MongoDB를 패키지 API를 수동으로 promisify 수 있습니다

    당신도 같은 MongoDB를-약속으로, 다른 패키지를 사용하거나 주위에 또는 bluebird.promisify 같은 약속 유틸리티 패키지를 통해 자신의 약속을 구축하여 MongoDB를 패키지 API를 수동으로 promisify 수 있습니다

  8. ==============================

    8.그것은 약속 인터페이스에 정의되어있는 연결 방법처럼 보이지 않는

    그것은 약속 인터페이스에 정의되어있는 연결 방법처럼 보이지 않는

    http://mongodb.github.io/node-mongodb-native/2.1/tutorials/connect/

    당신은 항상 MongoDB를 커넥터 라이브러리에서 직접 구현할 수 있습니다,하지만 그건 아마 당신이 찾고있는 것보다 참여합니다.

    당신이 정말로 약속과 함께 작업해야하는 경우, 당신은 항상 ES6의 약속 polyfill을 사용할 수 있습니다 :

    https://github.com/stefanpenner/es6-promise

    그와 연결 코드를 포장. 같은 뭔가

    var MongoClient = require('mongodb').MongoClient;
    var Promise = require('es6-promise').Promise;
    
    var url = 'mongodb://localhost:27017/example';
    
    var promise = new Promise(function(resolve, reject){
        MongoClient.connect(url, function (err, db) {
            if(err) reject(err);
            resolve(db);
        });        
    });
    
    promise.then(<resolution code>);
    
  9. ==============================

    9.당신은 몽고에 연결하는 약속을 만들어야합니다.

    당신은 몽고에 연결하는 약속을 만들어야합니다.

    myPromise.then (...) 그런 다음,이 약속을 사용하는 함수를 정의합니다.

    예를 들면 :

    function getFromMongo(cb) {
        connectingDb.then(function(db) {
    
           db.collection(coll).find().toArray(function (err,result){
               cb(result);
           });
    
        });
    }
    

    여기에 전체 코드는 다음과 같습니다

    http://jsfiddle.net/t5hdjejg/

  10. from https://stackoverflow.com/questions/37911838/how-to-use-mongodb-with-promises-in-node-js by cc-by-sa and MIT license