2016-01-23 36 views
2

我試圖通過使用藍鳥Promisify Mongoose連接,我需要減少我的回調,所以我用bluebird.But它給了我下面的錯誤。Promiseifying Mongoose Connect中的類型錯誤

var expect = require('chai').expect; 
var mongoose = require('mongoose'); 

var jobModel = require('../models/job'); 

var Promise = require('bluebird'); 

function resetJobs() { 
    return new Promise(function(resolve, reject) { 
    mongoose.connection.collections['jobs'].drop(resolve, reject); 
    }); 
}; 

function findJobs(query) { 
    return Promise.cast(mongoose.model('Job').find({}).exec()); 
}; 

var connectDB = Promise.promisify(mongoose.connect,mongoose); 
describe('get jobs', function() { 
    it('Should not be empty since jobs are seeded', function(done) { 
    connectDB('mongodb://localhost/jobfinder').then(function() { 
     resetJobs() 
     .then(jobModel.seedJobs) 
     .then(findJobs).then(function(jobList) { 
      expect(jobList.length).to.be.at.least(1); 
      done(); 
     }); 
    }); 
    }); 
}); 

但是這給了我一個錯誤我使用

Unhandled rejection TypeError: Cannot read property 'connection' of undefined 
at Mongoose.connect (F:\MyProjects\JobFinder\node_modules\mongoose\lib\index.js:232:18) 
at tryCatcher (F:\MyProjects\JobFinder\node_modules\bluebird\js\release\util.js:11:23) 
at ret (eval at <anonymous> (F:\MyProjects\JobFinder\node_modules\bluebird\js\release\promisify.js:184:12), <anonymous>:14:23) 
at Context.<anonymous> (F:\MyProjects\JobFinder\test\jobs-data-spec.js:22:3) 

包的版本如下

"bluebird": "^3.1.1", 
"express": "^4.13.4", 
"mongoose": "^4.3.6" 
+1

它似乎適用於下列代碼'var mongoose = require('mongoose'); var Promise = require('bluebird'); var connectDB = Promise.promisify(mongoose.connect,mongoose); console.log(connectDB);' – zangw

+0

已添加完整代碼 – user2473015

+1

它仍然正常運行,'var connectDB = Promise.promisify(mongoose.connect,mongoose); console.log(connectDB);''我猜你需要的'mongoose'模塊是不正確的... – zangw

回答

3

我的工作在同一個教程。
Bluebird在3.0中將api從 // 2.x Promise.promisify(fn,ctx); // 3.0 Promise.promisify(fn,{context:ctx});

我使呼叫改變,並且呼叫停止投擲錯誤。

看到這裏藍鳥解釋: http://bluebirdjs.com/docs/new-in-bluebird-3.html

希望這有助於

+0

謝謝你,1+分享鏈接 –

1

我工作在同一個教程爲好,這裏是我做過什麼來解決這個問題。

npm uninstall bluebird 
npm install --save [email protected] 

然後當你運行你的測試mocha你應該通過。

2

以下代碼似乎適用於我。

var connectMongoose = Promise.promisify(mongoose.connect, {context: mongoose}); 
connectMongoose('MONGO_URL', mongoose) 
.then(..)