[MONGODB] Node.js를, 몽고의 발견 및 반환 데이터
MONGODBNode.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.다른 답변에서 언급 한 바와 같이,이 코드는 비동기, 당신은 단순히 당신이 콜백 체인 (중첩 기능을) 아래로 원하는 값을 반환 할 수 없습니다. 당신은 (다시 전화 또는 콜백, 따라서) 당신이 원하는 값을 일단 당신이 전화 코드를 신호 할 몇 가지 인터페이스를 노출해야합니다.
다른 답변에서 언급 한 바와 같이,이 코드는 비동기, 당신은 단순히 당신이 콜백 체인 (중첩 기능을) 아래로 원하는 값을 반환 할 수 없습니다. 당신은 (다시 전화 또는 콜백, 따라서) 당신이 원하는 값을 일단 당신이 전화 코드를 신호 할 몇 가지 인터페이스를 노출해야합니다.
다른 답변에서 제공하는 콜백 예는 있습니다 만, 탐구 확실히 가치가 다른 옵션이 있습니다 : 약속.
대신 당신이 원하는 결과를 호출 할 콜백 함수의 모듈은 두 가지 상태, 이행 또는 거부를 입력 할 수있는 약속을 반환합니다. 그것은 그렇게되면이 두 상태 중 하나, 해당 기능을 입력 할 약속에 대한 호출 코드 대기가 호출된다. 모듈은 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.예, 이것은 비동기 코드 및 반환에 당신은 당신이 넣어 위치에 따라 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
from https://stackoverflow.com/questions/35246713/node-js-mongo-find-and-return-data by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게하여 MongoDB의 자동 증가 차 ID를 구현합니까? (0) | 2019.12.18 |
---|---|
[MONGODB] 아틀라스에 몽구스를 연결하는 데 실패 (0) | 2019.12.18 |
[MONGODB] 어떻게 글래스 피쉬에 제 3 자 라이브러리를 사용 하는가? (0) | 2019.12.18 |
[MONGODB] MongoDB를 PHP의 UTF-8 문제 (0) | 2019.12.18 |
[MONGODB] 자바 드라이버 MongoDB를 집계 (0) | 2019.12.18 |