Estoy tratando de mostrar datos de mongodb en mi página html. Ya logré insertar datos en db pero por alguna razón mi función "obtener" no funciona.
Estoy usando node.js con express framework y Angular para front-end y enrutamiento.
Esta es mi función "obtener" para recuperar datos de MongoDB:
var mongo = require('mongodb'); var assert = require('assert'); var url = 'mongodb://localhost:27017/loodgieters'; router.get('/get-data', function(req, res, next) { var resultArray = []; mongo.connect(url, function(err, db){ assert.equal(null, err); var cursor = db.collection('user-data').find(); cursor.forEach(function(doc, err){ assert.equal(null, err); resultArray.push(doc); }, function(){ db.close(); res.render('index', {items: resultArray}); }); }); });Y mi "post" que funciona
router.post('/insert', function(req, res, next) { var item = { name: req.body.name, adress: req.body.adress, postal: req.body.postal, city: req.body.city, email: req.body.email, phone: req.body.phone, quotation: req.body.quotation, message: req.body.message }; mongo.connect(url, function(err, db) { assert.equal(null, err); db.collection('user-data').insertOne(item, function(err, result){ assert.equal(null, err); console.log('Item inserted'); db.close(); }); }); res.redirect('/contact'); });No estoy seguro de si esta es la forma correcta de abrir y cerrar la conexión mongo cada vez que intenta consultar. si desea optar por otro enfoque, use mangosta y siga algo como esto https://pastebin.com/g7aatzzj
Creo que tiene un error en las devoluciones de llamada de la función .find().forEach . El manejo de errores parece estar en endCallback, no en iteratorCallback.
Según el documento oficial , la forma correcta debería ser:
var mongo = require('mongodb'); var assert = require('assert'); var url = 'mongodb://localhost:27017/loodgieters'; router.get('/get-data', function(req, res, next) { var resultArray = []; mongo.connect(url, function(err, db){ assert.equal(null, err); var cursor = db.collection('user-data').find({}); cursor.forEach(function(doc){ assert.notEqual(null, doc); resultArray.push(doc); }, function(err, doc){ assert.equal(null, err); db.close(); res.render('index', {items: resultArray}); }); }); });Esto también se puede encontrar en sus pruebas unitarias.
var cursor = collection.find({}) .map(function(x) { return {a:1}; }) .batchSize(5) .limit(10); cursor.forEach(function(doc) { test.equal(1, doc.a); }, function(err, doc) { test.equal(null, err); db.close(); test.done(); });Creo que debe tener un error que no se pasa a la primera devolución de llamada y no se maneja en la segunda. Entonces no ves el error.
Intente insertar un objeto vacío en la función find() de la siguiente manera:
var cursor = db.collection('user-data').find({});