Search code examples
node.jsmongodbnode-mongodb-native

Node Driver MongoDb - handleCallbaak is not defined instead of catch() firing


Using Node 8.* and MongoDb driver mongodb@2.2.31

I am testing the my code base to see how it behaves if my MongoDB ever crashes. The way I test is to turn the MongoDB daemon off.

The catch() statement is not executing. Instead I get the mongodb driver error ReferenceError: handleCallbaak is not defined when mongo.tempUsers.add(body, token, password) executes.

Why is this? Shouldn't the catch() execute?

TempUsers.prototype.add = function(body, token) {
  const user = { "email" : body.email };

  return this.collection.updateOne(user,
    { $set: {
      "token": token,
      "createdAt": new Date(),
      }
    },
    {
      writeConcern: true,
      maxTimeMS: QUERY_TIME,
      upsert: true
    }
  );

const confirmUser = (body, password) => {
  const token = uuidv4();
  const result = mongo.tempUsers.add(body, token, password);
  result.then(() => sendConfirmationEmail(body, token)).catch(e => console.log(e));
};

UPDATE: How my own collections object is created:

   var collections = {
     tempUsers: false
   };

function connect(dbURI) {
  return MongoClient
    .connect(dbURI)
    .then(function(db) {
      console.log(colors
        .bold('MongoDB default connection open to ' + dbURI));
      initDbListeners(db);
      initCollections(db);
      return db;
    })
    .catch(function(err) {
      console.log(colors
        .red(err));
    });
}

function initCollections(db) {
  collections.tempUsers = new TempUsers(db);
}


module.exports.collections = collections;

/home/one/github/dolphin/node_modules/mongodb/lib/collection.js:1057
    if(err) return handleCallbaak(callback, err, null);
            ^

ReferenceError: handleCallbaak is not defined
    at Object.c (/home/one/github/dolphin/node_modules/mongodb/lib/collection.js:1057:13)
    at Store.flush (/home/one/github/dolphin/node_modules/mongodb/lib/topology_base.js:68:30)
    at Server.reconnectFailedHandler (/home/one/github/dolphin/node_modules/mongodb/lib/server.js:290:18)
    at emitOne (events.js:115:13)
    at Server.emit (events.js:210:7)
    at Pool.<anonymous> (/home/one/github/dolphin/node_modules/mongodb-core/lib/topologies/server.js:324:14)
    at emitOne (events.js:115:13)
    at Pool.emit (events.js:210:7)
    at Connection.<anonymous> (/home/one/github/dolphin/node_modules/mongodb-core/lib/connection/pool.js:317:16)
    at emitTwo (events.js:125:13)
    at Connection.emit (events.js:213:7)
    at Socket.<anonymous> (/home/one/github/dolphin/node_modules/mongodb-core/lib/connection/connection.js:187:49)
    at Object.onceWrapper (events.js:316:30)
    at emitOne (events.js:115:13)
    at Socket.emit (events.js:210:7)
    at emitErrorNT (internal/streams/destroy.js:64:8)

Solution

  • The mongodb node_modules/mongodb/lib/collection.js file on your system is different from the released file.

    Remove the /home/one/github/dolphin/node_modules/mongodb directory from your project and run npm install again.