Этот вопрос следует этому вопросу: node.js: how to return a value of a callback function?Bluebird.Promisify - Как правильно создать цепочку обещаний?
Я решил написать код в предыдущем вопросе, используя Bluebird.promisify. Это то, что я писал:
var express = require('express')
var app = express()
var MongoClient = require('mongodb').MongoClient;
var db = require('./db.js')
var Promise = require('bluebird');
app.get('/', function(req, res){
var result = Promise.promisify(db.get_document);
result().then(function(doc) {
res.send(doc);
console.log("end");
});
});
app.listen(3000, function(req, res) {
console.log("Listening on port 3000");
});
function get_document() {
var connect = Promise.promisify(MongoClient.connect);
connect(url).then(function(err,db) {
var col = db.collection('myinterviews'); // !!! ERROR!!! 'db' undefined
return col.find().toArray
}).then(function (err, docs) {
db.close();
return docs[0].name;
});
};
Линия:
var col = db.collection('myinterviews');
выдает сообщение об ошибке:
"Unhandled rejection TypeError: Cannot read property 'collection' of undefined."
Функция MongoClient.connect принимает функцию обратного вызова с двумя аргументами, так почему 'db' undefined?
Я не вижу, как MongoClient определяется где угодно, это может быть проблемой. где задан url. – anwerj
Я пропустил это, когда скопировал код. Я отредактировал оригинальный пост. – CrazySynthax
Где вы называете 'get_document'? – Bergi