 <p>Promise does not pass err and result to same method. You have to add <code>catch</code> to get err.</p> <p>Also the method you promisify takes a callback and call it with first parameter as error and other as result.</p> <pre><code>var express = require('express') var app = express() var MongoClient = require('mongodb').MongoClient; var Promise = require('bluebird'); app.get('/', function(req, res){ var result = Promise.promisify(get_document); result().then(function(doc) { res.send(doc); console.log("end"); }).catch(function(err){ console.log(err); res.status(500).send(err.toString()); }); }); app.listen(3000, function(req, res) { console.log("Listening on port 3000"); }); function get_document (callback) { return Promise.promisify(MongoClient.connect)(YOUR_URL) .then(function(db){ return db.collection(YOUR_COLLECTION).find().toArray(); }) .then(function (docs) { return callback(null, docs[0].name); }).catch(function(err){ return callback(err); }); }; </code></pre>