복붙노트

[MONGODB] Node.js를, 몽고의 발견 및 반환 데이터

MONGODB

Node.js를, 몽고의 발견 및 반환 데이터

나는 노드에 새로 온 사람과 VB6와 MySQL 15 년 후 몽고. 내 최종 프로그램을 사용하지만 다른 모듈에서 함수를 호출하고 결과를 다시 얻는 방법에 대한 기본적인 이해를 얻을 필요가 무엇인지이 아니다입니다.

나는 모듈이하는 DB를 열 수있는 기능을 가지고 컬렉션의 발견과 결과를 반환합니다. 나도 다른 모음에 대한 해당 모듈에 몇 가지 더 많은 기능을 추가 할 수 있습니다. 지금은 가능한 한 간단하게 필요한 경우, 나중에 등 오류 처리기를 추가 할 수 있습니다. 나는 다른 방법, module.exports = {... 주위의 기능을 시도하는 일이에 있었고, 밖으로는, .send, 행운 모든를 반환합니다. 데이터가되기 전에 프로그램이 표시 점을 통과 할 수 있도록 나는 그것의 비동기를 이해합니다.

여기에 내가 몽고는 COL1의 컬렉션 DB1의 데이터베이스를 실행하는 시도했습니다거야.

Db1.js
var MongoClient = require('mongodb').MongoClient;
module.exports = {
    FindinCol1 : function funk1(req, res) {
    MongoClient.connect("mongodb://localhost:27017/db1", function (err,db) {
            if (err) {
                return console.dir(err);
            }
            var collection = db.collection('col1');
            collection.find().toArray(function (err, items) {
                    console.log(items);
                   // res.send(items);
                }
            );
        });
    }
};


app.js
a=require('./db1');
b=a.FindinCol1();
console.log(b);

CONSOLE.LOG (항목) 작동 할 때 'FindinCol1'호출하지만 CONSOLE.LOG하지 (b)는 (반환 '정의되지 않은') 나는 반환을받지 못했습니다 또는 나는 시간을 붙여 넣을거야 그래서입니다 돌아갑니다. 나는 게시물의 수십 읽고 본 동영상 수십하지만, 난 여전히이 시점에서 붙어했습니다. 어떤 도움을 크게 감상 할 수있다.

해결법

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

    1.다른 답변에서 언급 한 바와 같이,이 코드는 비동기, 당신은 단순히 당신이 콜백 체인 (중첩 기능을) 아래로 원하는 값을 반환 할 수 없습니다. 당신은 (다시 전화 또는 콜백, 따라서) 당신이 원하는 값을 일단 당신이 전화 코드를 신호 할 몇 가지 인터페이스를 노출해야합니다.

    다른 답변에서 언급 한 바와 같이,이 코드는 비동기, 당신은 단순히 당신이 콜백 체인 (중첩 기능을) 아래로 원하는 값을 반환 할 수 없습니다. 당신은 (다시 전화 또는 콜백, 따라서) 당신이 원하는 값을 일단 당신이 전화 코드를 신호 할 몇 가지 인터페이스를 노출해야합니다.

    다른 답변에서 제공하는 콜백 예는 있습니다 만, 탐구 확실히 가치가 다른 옵션이 있습니다 : 약속.

    대신 당신이 원하는 결과를 호출 할 콜백 함수의 모듈은 두 가지 상태, 이행 또는 거부를 입력 할 수있는 약속을 반환합니다. 그것은 그렇게되면이 두 상태 중 하나, 해당 기능을 입력 할 약속에 대한 호출 코드 대기가 호출된다. 모듈은 resolveing ​​또는 거부함으로써 상태 변화를 트리거한다. 어쨌든, 여기에 약속을 사용하는 예입니다 :

    Db1.js :

    // db1.js VAR MongoClient =은 ( 'MongoDB를')을 필요로 MongoClient을.; / * Node.js를 최신 버전의 약속을 기본적으로 지원합니다. 당신이 이전 버전을 사용하는 경우 몇 가지 라이브러리를 사용할 수있다 : 내가 잘 알고 있어요으로 블루 버드, RSVP는 Q. 여기 RSVP 사용합니다. * / VAR 약속 =은 ( 'RSVP')을 필요로 약속을.; module.exports = {   FindinCol1 : 함수 () {     반환 새로운 약속 (기능 (해결, 거부) {       MongoClient.connect ( 'MongoDB를 : // 로컬 호스트 : 27017 / DB1', 기능 (ERR, dB) {         경우 (ERR) {           (ERR)를 거부;         } 다른 {           해결 (dB);         }       }     }). 다음 (함수 (dB) {       반환 새로운 약속 (기능 (해결, 거부) {         VAR 컬렉션 db.collection = ( 'COL1');                  collection.find (). toArray (함수 (ERR 항목) {           경우 (ERR) {             (ERR)를 거부;           } 다른 {             CONSOLE.LOG (항목);             해결 (항목);           }         });       });     });   } }; // app.js var에 DB를 =는 ( './ DB1')를 필요로;      db.FindinCol1 (). 다음 (함수 (항목) {   console.info ( '약속이 항목 성취되었다!', 항목); } 함수 (ERR) {   console.error (ERR, err.stack을 '약속이 거부되었습니다'); });

    이제, Node.js를 MongoDB를 드라이버의 최신 버전이 약속에 대한 기본 지원을 더 위로에, 당신은 위의 같은 약속에 콜백을 래핑하는 모든 작업을 할 필요가 없습니다. 당신은 최신 드라이버에 최대를 사용하는 경우이 훨씬 더 좋은 예입니다 :

    // db1.js VAR MongoClient =은 ( 'MongoDB를')을 필요로 MongoClient을.;                         module.exports = {   FindinCol1 : 함수 () {     반환 MongoClient.connect ( 'MongoDB를 : // 로컬 호스트 : 27017 / DB1') 그 때는 (기능 (dB) {       VAR 컬렉션 db.collection = ( 'COL1');              collection.find ()를 호출 toArray ()를.;     }). 다음 (함수 (항목) {       CONSOLE.LOG (항목);       항목을 반환;     });   } }; // app.js var에 DB를 =는 ( './ DB1')를 필요로;      db.FindinCol1 (). 다음 (함수 (항목) {   console.info ( '약속이 항목 성취되었다!', 항목); } 함수 (ERR) {   console.error (ERR, err.stack을 '약속이 거부되었습니다'); });

    약속은 내가보기 엔 그들에 익숙해 시간을 보내는 것이 좋습니다, 비동기 제어 흐름을위한 훌륭한 방법을 제공합니다.

  2. ==============================

    2.예, 이것은 비동기 코드 및 반환에 당신은 당신이 넣어 위치에 따라 MongoClient 객체 또는 아무것도를 얻을 것이다.

    예, 이것은 비동기 코드 및 반환에 당신은 당신이 넣어 위치에 따라 MongoClient 객체 또는 아무것도를 얻을 것이다.

    당신은 콜백 매개 변수를 사용한다 :

    module.exports = {
      FindinCol1 : function funk1(callback) {
        MongoClient.connect("mongodb://localhost:27017/db1", function (err,db) {
          if (err) {
            return console.dir(err);
          }
          var collection = db.collection('col1');
          collection.find().toArray(function (err, items) {
            console.log(items);       
            return callback(items);     
          });
        });
      }
    };
    

    FindinCol1에 콜백 함수를 전달합니다

    a.FindinCol1(function(items) {
      console.log(items);
    });
    

    나는이 문서를 확인하는 것이 좋습니다 : https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks

  3. from https://stackoverflow.com/questions/35246713/node-js-mongo-find-and-return-data by cc-by-sa and MIT license