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);
});
그 는 리고 and and and and and and and and and and 。undefined
그런 경우에는 그렇게 하는 방법이 아닌 것 같습니다.
콜백 대신 약속과 함께 노드 내 mongo db를 사용할 수 있는 방법이 있습니까?
당신의 접근법은 거의 옳다. 단지 당신의 주장의 작은 실수일 뿐이다.
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) {})
비동기/대기할 수도 있습니다.
async function main(){
let client, db;
try{
client = await MongoClient.connect(mongoUrl, {useNewUrlParser: true});
db = client.db(dbName);
let dCollection = db.collection('collectionName');
let result = await dCollection.find();
// let result = await dCollection.countDocuments();
// your other codes ....
return result.toArray();
}
catch(err){ console.error(err); } // catch any mongo error here
finally{ client.close(); } // make sure to close your connection after
}
위의 답변들 중 어느 것도 Bluebird나 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});
도움이 됐으면 좋겠다.이것을 개선하기 위한 제안이 있으면, 나에게 알려주세요.저는 제 자신을 개선할 용의가 있습니다:)
이것은 Node.js에서의 약속과 함께 MongoDB를 사용하는 방법에 대한 일반적인 답변입니다.
callback 파라미터가 생략되면 mongodb는 약속을 반환합니다.
Promise로 변환하기 전에
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)
});
}
})
Promise로 변환 후
//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) {})
파티에 조금 늦은 건 알지만 ES6를 사용한 예를 공유하려고 합니다.
const config = require('config');
const MongoClient = require('mongodb').MongoClient;
var _connection;
var _db;
const closeConnection = () => {
_connection.close();
}
/**
* Connects to mongodb using config/config.js
* @returns Promise<Db> mongo Db instance
*/
const getDbConnection = async () => {
if (_db) {
return _db;
}
console.log('trying to connect');
const mongoClient = new MongoClient(config.mongodb.url, { useNewUrlParser: true });
_connection = await mongoClient.connect();
_db = _connection.db(config.mongodb.databaseName);
return _db;
}
module.exports = { getDbConnection, closeConnection };
자세한 내용은 이쪽을 참조해 주십시오.
https://medium.com/swlh/how-to-connect-to-mongodb-using-a-promise-on-node-js-59dd6c4d44a7
경고 편집:
John Culviner가 지적한 바와 같이 이 답변은 권장되지 않습니다.드라이버를 사용하세요. OOTB와 함께 제공됩니다.
도서관으로 한다면, 은 블루버드를 할 수 .promisifyAll()
MongoClient 서 mong :
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);
});
여기 연결을 위한 라이너 하나가 있습니다.
export const openConnection = async () =>
await MongoClient.connect('mongodb://localhost:27017/staticback')
이렇게 부르면
const login = async () =>
const client = await openConnection()
대체 패키지를 사용할 수 있습니다(예:mongodb
API를 수동으로 패키징하기 위해 API를 직접 구축하거나 다음과 같은 약속 유틸리티 패키지를 사용합니다.
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)
})
이것은 @pirate App의 답변에 근거하고 있습니다.
const open = (dbName, collectionName) => {
const URI = process.env.MONGO_URI;
return new Promise((resolve, reject) => {
let savedConn = null;
MongoClient.connect(URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then((conn) => {
savedConn = conn;
return conn.db(dbName).collection(collectionName);
})
.then((db) => {
resolve({ db, savedConn });
})
.catch((err) => reject(err));
});
};
몽고와 관련된 약속을 만들어야 합니다.
다음으로 이 약속을 사용하는 기능을 정의합니다.myPromise.then(...)
.
예를 들어 다음과 같습니다.
function getFromMongo(cb) {
connectingDb.then(function(db) {
db.collection(coll).find().toArray(function (err,result){
cb(result);
});
});
}
다음은 전체 코드입니다.
async function main(){
let client, db;
try{
client = await MongoClient.connect(mongoUrl, {useNewUrlParser: true});
db = client.db(dbName);
let dCollection = db.collection('collectionName');
let result = await dCollection.find();
// let result = await dCollection.countDocuments();
// your other codes ....
return result.toArray();
}
catch(err){ console.error(err); } // catch any mongo error here
finally{ client.close(); } // make sure to close your connection after
}
접속 메서드에 약속 인터페이스가 정의되어 있지 않은 것 같습니다.
http://mongodb.github.io/node-mongodb-native/2.1/tutorials/connect/
Mongodb 커넥터 라이브러리에서는 언제든지 실장할 수 있지만, 이것은 아마 당신이 찾고 있는 것보다 더 중요한 것일 것입니다.
꼭 약속을 지켜야 할 경우 언제든지 ES6 약속 폴리필을 사용할 수 있습니다.
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>);
언급URL : https://stackoverflow.com/questions/37911838/how-to-use-mongodb-with-promises-in-node-js
'sourcecode' 카테고리의 다른 글
ErrorBoundary를 사용하여 캡처한 후에도 여전히 오류가 표시되는 반응 (0) | 2023.03.04 |
---|---|
Switch'가 'react-router-dom'에서 내보내지지 않았습니다. (0) | 2023.03.04 |
Mongodb에서 대소문자를 구분하지 않는 쿼리를 작성하려면 어떻게 해야 합니까? (0) | 2023.03.04 |
com.sysml.syscl.syscind.exc를 지정합니다.인식할 수 없는 속성 예외:인식할 수 없는 필드 (0) | 2023.03.04 |
기본 MongoDB 쉘로 예쁘게 인쇄 (0) | 2023.03.04 |