2016-11-03 3 views
0

Я пытаюсь использовать bluebird в первый раз, чтобы свести к минимуму обратные вызовы и проблемы синхронизации. Я просто используя нативный клиент MongoDB с синей птицей следующим образом:nodejs mongodb bluebird error: db.getCollectionAsync не является функцией

var mongodb = require('mongodb'); 
var Promise = require("bluebird"); 
Promise.promisifyAll(mongodb); 
var MongoClient = mongodb.MongoClient; 

Тогда позже, в module.exports объекта, у меня есть:

foofunc: function(callback) { 
    MongoClient.connectAsync(url) 
    .then(function(db) { 
     //MongoDB should create collection if its not already there 
     console.log('... connect worked. OK now get bar collection'); 
     return db.getCollectionAsync('bar'); 
    }) 
    .then(function(col){ 
     //do something with the returned collection col 
    }) 
    .catch(function(err){ 
     //handle errors 
     console.log(err); 
     return callback(err); 
    }); 
    } 

Я называю это от моего сервера работает на локальный. Соединение работает, но потом сразу же после того, как я получаю ошибку: Unhandled отказ TypeError: db.getCollectionAsync не является функцией

Что я делаю неправильно? Это потому, что я делаю все это на сервере? Если да, то как работает соединение, которое также суффикс с Async работает? :-(

ответ

0

Насколько я вижу вас, используя родной драйвер MongoDB NodeJs.

http://mongodb.github.io/node-mongodb-native/2.2/api/Db.html

Если это так, тогда вам нужно использовать

return db.collection('bar');

также указать к узлу здесь, что этот метод является синхронным.

Этот ответ также может быть полезен для вас.

How can I promisify the MongoDB native Javascript driver using bluebird?

Надеется, что это помогает.

+0

OMG !!! Страницы документации настолько похожи. Я смотрел на https://docs.mongodb.com/v2.6/reference/method/db.getCollection/ вместо http://mongodb.github.io/node-mongodb-native/2.2/api/Collection. html !!! Спасибо, что все работает сейчас :) – rstruck