[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.당신의 접근 방식은, 당신의 인수 단지 작은 실수 거의 정확
당신의 접근 방식은, 당신의 인수 단지 작은 실수 거의 정확
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.블루 버드 또는 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.이 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.또한 비동기 / 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.편집 경고 :
편집 경고 :
존 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.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.당신도 같은 MongoDB를-약속으로, 다른 패키지를 사용하거나 주위에 또는 bluebird.promisify 같은 약속 유틸리티 패키지를 통해 자신의 약속을 구축하여 MongoDB를 패키지 API를 수동으로 promisify 수 있습니다
당신도 같은 MongoDB를-약속으로, 다른 패키지를 사용하거나 주위에 또는 bluebird.promisify 같은 약속 유틸리티 패키지를 통해 자신의 약속을 구축하여 MongoDB를 패키지 API를 수동으로 promisify 수 있습니다
-
==============================
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.당신은 몽고에 연결하는 약속을 만들어야합니다.
당신은 몽고에 연결하는 약속을 만들어야합니다.
myPromise.then (...) 그런 다음,이 약속을 사용하는 함수를 정의합니다.
예를 들면 :
function getFromMongo(cb) { connectingDb.then(function(db) { db.collection(coll).find().toArray(function (err,result){ cb(result); }); }); }
여기에 전체 코드는 다음과 같습니다
http://jsfiddle.net/t5hdjejg/
from https://stackoverflow.com/questions/37911838/how-to-use-mongodb-with-promises-in-node-js by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 '카운트 ()'매우 느립니다. 우리는 어떻게 그것으로 주위에 / 작업을 수정합니까? (0) | 2019.12.11 |
---|---|
[MONGODB] 몽구스 연결 오류 콜백이있다 (0) | 2019.12.11 |
[MONGODB] 몽고 ObjectId가 직렬화 할 때 JSON.NET 오류 캐스팅 (0) | 2019.12.11 |
[MONGODB] 몽고는 ID의 목록을 찾을 수 있습니다 (0) | 2019.12.11 |
[MONGODB] 유성 - collection.find ()는 항상 모든 필드를 반환 (0) | 2019.12.11 |