Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我应该如何创建需要mongodb连接的自定义模块?_Node.js_Mongodb - Fatal编程技术网

Node.js 我应该如何创建需要mongodb连接的自定义模块?

Node.js 我应该如何创建需要mongodb连接的自定义模块?,node.js,mongodb,Node.js,Mongodb,我正在使用nodejs、express和mongodb开发一个web应用程序 在我为API调用列出的“main”文件中,我包含了一个Users类,该类具有Users.authenticate(userObject,callback)和Users.getById(userId,callback)等方法 很抱歉收到这么长的代码片段。这只是我的users类的一个片段。 function Users (db) { if (!db) { return {'message': 'creating

我正在使用nodejs、express和mongodb开发一个web应用程序

在我为API调用列出的“main”文件中,我包含了一个Users类,该类具有Users.authenticate(userObject,callback)和Users.getById(userId,callback)等方法

很抱歉收到这么长的代码片段。这只是我的users类的一个片段。

function Users (db) {
  if (!db) {
    return {'message': 'creating an instance of Users requires a database'}
  } else {
    this.db = db;
    return this;
  }
}

Users.prototype.authenticate = function (user, callback) {
  if (!user.username) {
    return {'message': 'Users.authenticate(user, callback) requires user.username'};
  } else if (!user.password) {
    return {'message': 'Users.authenticate(user, callback) requires user.password'};
  } else if (!callback) {
    return {'message': 'Users.authenticate(user, callback) requires callback(err, user)'};
  }

  this.db.collection('users', function (err, collection)  {
    if (err) {return {'message': 'could not open users collection'}};

    /* query for the user argument */
    collection.findOne(user, function (err, doc) {
      if (!err) {
        if (!doc) {
          callback({'message': 'user does not exist'}, null);
        } else {
          callback(null, doc);
        }
      } else {
        callback({'message': 'error finding user'}, null);
      }

    });
  });
};
exports.Users = Users;
就这样

我将open DB连接传递给我的Users类,并进行如下调用:

var server = new mongo.Server('localhost', '27017', {auto_reconnect: true});
var db = new mongo.Db('supportdash', server, {"fsync": true});

// open connection to be, init users
db.open(function (err, db) {
  var users = new Users(db);
  users.authenticate({"username": "admin", "password": "password"}, function (err, user) {
    // do something with the error, or user object
  });
});
现在回答我的问题

  • 我应该传递一个opendb连接,还是应该传递Users类管理其自身连接所需的信息(localhost、端口、数据库名称)

  • 我尝试使用jasmine节点进行测试,但最终在异步数据库调用方面遇到了很多问题。我想添加一个用户,然后测试Users.authenticate是否正常工作。我使用了Jasmines runs()和waitsfor()异步助手,但无法使其工作。然后,我遇到了一个调试(使用另一个类)花费了我一段时间的问题,而测试本可以节省我很多时间。关于如何测试与mongodb数据库交互的类,有什么建议吗