javascript - mongoclient - nodejs mongodriver
node.js mongodb javascript scoping confusiĆ³n (1)
Dado que los elementos se recuperan de MongoDB de forma asíncrona, la función get_data
debe aceptar una devolución de llamada que se utilizará para devolver los resultados. Creo que también necesitarás open
explícitamente la conexión de la base de datos.
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);
});
Estoy desarrollando una aplicación express.js, sin mangosta.
Lo que intento hacer es encapsular llamadas a mongodb dentro de una función, pasarle a la función algún parámetro y recuperar los datos de mongodb.
El problema que me estoy encontrando se explica por el siguiente código
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;
}
¿Cómo devuelvo los elementos Matriz que extraje de mongo db de esta función?
Quiero saber cómo funciona el alcance en JavaScript y cómo incluir los elementos en una variable y devolverlos desde la función get_data.
Después de la respuesta
Arreglé el código. Ahora funciona y se ve así.
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);
});