2017-11-18 4 views
2

mongodb 기본 드라이버를 사용하는 node.js 응용 프로그램이 있습니다. 노드 v8.9.1을 사용하여 애플리케이션 코드를 async/await으로 마이그레이션하는 과정에서 mongodb 쿼리를위한 우아한 방법을 찾기 위해 애를 먹고 있습니다. mongodb 드라이버의 주요 문제점은 모든 쿼리가 약속 기능이 비동기 메소드에 필수 사항 인 콜백을 사용하고 있다는 것입니다.Node.js mongodb 드라이버 비동기/쿼리 대기

대안 : mongoose - 약식 쿼리가 사용되지 않으며 내 응용 프로그램에 약간의 오버 헤드가있는 스키마 모델을 사용해야합니다. mongoist - 비동기식/내장형으로 구축되었으므로 충분히 기대할 수 있지만 mongodb에 대한 SSL 연결 및 잘못된 문서화로 인한 오류로 인해이 솔루션에서 멀어졌습니다.

우아한 방법으로 구현하는 데 성공한 유일한 해결책은 callback-promise npm 패키지를 사용하여 mongodb 드라이버 API를 완전히 약속하는 것으로 변환하는 것입니다.

세련된 고성능을위한 새로운 아이디어가 있습니까?

+0

@MikaS는 'co'패키지가 필요합니다. 나는 기본적으로 완벽한 가정용 라이브러리 인 –

답변

2

콜백을 전달하지 않으면 mongodb 클라이언트가 약속을 반환합니다.

공식 MongoDB를 Node.js를 드라이버는 MongoDB의 응용 프로그램은 공식 docs

에서 ES6

의 새로운 기능을 최대한 활용할 수와 양을 기반으로 콜백뿐만 아니라 약속을 기반으로 상호 작용을 제공합니다

5

감사합니다. ES6과 함께 잘 작동 :

const middleWare = require('middleWare'); 
const MONGO = require('mongodb').MongoClient; 

router.get('/', middleWare(async (req, res, next) => { 
    const db = await MONGO.connect(url); 
    const MyCollection = db.collection('MyCollection'); 
    const result = await MyCollection.find(query).toArray(); 
    res.send(result); 
})) 
+0

을 찾고 있습니다. 이것은 훌륭한 대답입니다. 'require ('middleware')'단계를 알아 내려고하는 다른 모든 사람들을 위해 다음은 훌륭한 가이드입니다 : https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8 -b8af872c0016 –