我正在开发一个没有mongoose的express.js应用程序。
我要做的是,在函数中封装对mongodb的调用,将函数传递给某个参数并从mongodb获取数据。
我遇到的问题由下面的代码解释
function get_data()
{
var mongo = require('mongodb'),Server = mongo.Server,Db = mongo.Db;
var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('test', server);
db.collection('test_collection', function(err, collection) {
collection.find().toArray(function(err, items) {
var data = items;
});
});
console.log(data);
console.log("in get");
return data;
}
如何从此函数返回从mongo db中提取的数组。
我想知道如何在javascript中使用作用域,以及如何将这些项放在变量中并从get_data函数返回它们。
回答后
我修复了代码。它现在有效,看起来像这样。
function get_data(callback) {
var mongo = require('mongodb'),Server = mongo.Server,Db = mongo.Db;
var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('test', server);
db.open(function(err, db) {
if (err) return callback(err);
db.collection('test_collection', function(err, collection) {
if (err) return callback(err);
collection.find().toArray(callback);
});
});
}
get_data(function(err, items) {
// handle error
console.log(items);
});
答案 0 :(得分:0)
由于从MongoDB异步检索项,因此函数get_data
需要接受将用于返回结果的回调。我相信你还需要明确open
数据库连接。
function get_data(callback) {
...
db.open(function(err, db) {
if (err) return callback(err);
db.collection('test_collection', function(err, collection) {
if (err) return callback(err);
collection.find().toArray(callback);
});
});
}
get_data(function(err, items) {
// handle error
console.log(items);
});