0

I have the following code:

var db;

MongoClient.connect("mongodb://localhost:27017/mobregserver", function(err, database) {
  if(!err) {
    console.log("We are connected");
  }

  db = database;

});

db.collection('bbr').insert({fields: "fields", files: "files"}, {upsert:true}, function(err, result) {
      if(!err){
        console.log("written");
      }
});

And I get the following output:

We are connected

TypeError: Cannot call method 'collection' of undefined

Bildsoe
  • 1,310
  • 6
  • 31
  • 44

2 Answers2

0

Connect method is asyncrone, so your db variable will be initialized much later, then you start using it. Try this code:

MongoClient.connect("mongodb://localhost:27017/mobregserver", function(err, database) {
  if(err) {
    // Here, it may be better to interrupt further work in case of error
    console.log('fail', err);
    return;
  }

  var db = database;

  db.collection('bbr').insert({fields: "fields", files: "files"}, {upsert:true}, function(err, result) {
          if(!err){
            console.log("written");
          }
    });
});

EDIT

A full example of nodejs server, taken from here

var express = require('express');
var mongodb = require('mongodb');
var app = express();

var MongoClient = require('mongodb').MongoClient;
var db;

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) {
  if(err) throw err;

  db = database;

  // Start the application after the database connection is ready
  app.listen(3000);
  console.log("Listening on port 3000");
});

// Reuse database object in request handlers
app.get("/", function(req, res) {
  db.collection("replicaset_mongo_client_collection").find({}, function(err, docs) {
    docs.each(function(err, doc) {
      if(doc) {
        console.log(doc);
      }
      else {
        res.end();
      }
    });
  });
});
Anhayt Ananun
  • 896
  • 1
  • 11
  • 27
  • This works, but I need to store the connection to the database in order to use it later and in a lot of different places. – Bildsoe Mar 10 '15 at 06:26
  • Take a look at this [example](http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connection-pooling) . Here, we assume that db is successfully initialized before user calls to server. – Anhayt Ananun Mar 10 '15 at 06:42
0
    var db;

    MongoClient.connect("mongodb://localhost:27017/mobregserver", function(err, database) {
      if(!err) {
        console.log("We are connected");


      db = database;
    db.collection('bbr').insert({fields: "fields", files: "files"}, {upsert:true}, function(err, result) {
          if(!err){
            console.log("written");
          }

    });
    }
    });
Ravindra Galav
  • 2,730
  • 2
  • 13
  • 16