Search code examples
node.jsexpressnode-mongodb-native

Attempting to return collection with node.js hangs system


I have a node.js application that uses a mongodb database that I've created. Within it, I have a simple collection named comments with the contents { "author": "me", "comment": "this is a comment" } when I call db.comments.find({}).

However, when I attempt to access this collection for display within a jade view I have, it times out after an incrediable amount of time. Console.log for the error object shows it's either a MongoError or connection was destroyed by application. The question I have is why this is happening? I have no errant while loops and connection parameteres seem to check out. Here's what I have to connect with, stored in app.js

var app = express();

var mongodb = require('mongodb'),
serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
db = new mongodb.Db('acl', serverdb, {safe:true});

app.use(function(req,res,next){
    req.db = db;
    next();
});

and the code I have in the middleware file, stored as a js file in /routes

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
    var db = req.db;
    var collection = db.collection('comments');

    collection.find().toArray(function(err, docs) {
        console.log("Printing docs from Array");
        if (err) {
            console.log(err);
        } else {
            console.log(docs);
        }
    });

    db.close();
});

module.exports = router;

Solution

  • Oddly enough replacing this code

    var mongodb = require('mongodb'),
    serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
    db = new mongodb.Db('acl', serverdb, {safe:true});
    

    with this

    var db = require("mongojs").connect("localhost:27017/acl", ["comments"]);
    

    made all the difference. No more timeouts. A bit of tweeking to get it to return data.