文章类型: JAVASCRIPT
关键词: NodeJs,操作,mongodb
内容摘要:

关于NodeJs为什么要用mongoose操作mongodb

2015/7/29 15:46:38    来源:wumingbao    阅读:

很多nodejs的新手都是直接用mongodb本身直接操作数据库,我之前也是如此

不知道大家有没有遇到过这个错误:

Error: db object already connecting, open cannot be called multiple times

也许你会说是异步写得不好,但是就算异步写得再好,也逃避不了这个错误 因为无论如何,都要用到db.open();这东西,而且访问完毕还得db.close();

于是就有一个问题:刷新得太快,或者多个用户同时访问数据库,数据库没来得及关闭,那个Error就会出现

可以做一下实验,在访问数据库的页面按住F5,就会很容易看到在页面上或者控制台上抛出的Error勒

用mongoose就不会出现这错误勒,因为一旦连接好数据库,db就会处于open状态,不存在访问时要打开,然后又要关闭的规则,然后我果断把所有mongodb部分改为mongoose,按住F5毫无压力啊,而且尼玛代码又短了一大截!

前后代码对比一下:

之前每次操作要open:

User.get = function get(username, callback) {
  mongodb.open(function(err, db) {
    if (err) {
      return callback(err);
    }
    //读取 users 集合
    db.collection('users', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      //查找 name 属性为 username 的文档
      collection.findOne({name: username}, function(err, doc) {
        mongodb.close();
        if (doc) callback (err, doc);
        else callback (err, null);
      });
    });
  });};

现在,建立好mongoose对象模型后只需几行代码即可实现相同的功能:

User.get = function get(username, callback) {
  users.findOne({name:username}, function(err, doc){
    if (err) {
      return callback(err, null);
    }
    return callback(err, doc);
  });};


↑ 上一篇文章:nodejs安装Express框架 关键词:nodejs,安装,Express,框架 发布日期:2015/7/29 15:44:16
↓ 下一篇文章:使用Linq对多个字符串进行一个字典序排序 关键词:C#,Linq,多个,字符串,字典序,排序 发布日期:2015/7/29 16:16:35
相关文章:
线程间操作无效: 从不是创建控件的线程访问它的三种方法 关键词:C#,多线程,线程间操作无效,从不是创建控件的线程访问它,三种方法 发布日期:2015-07-30 13:37
C#操作Excel的方式大全 关键词:C#,操作,Excel,方式,大全,辅助类 发布日期:2016-02-05 23:25
C#中的装箱和拆箱操作 关键词:C#,装箱,拆箱,操作 发布日期:2015-07-29 10:12
相关目录:.NET软件开发JAVASCRIPTJAVAANDROID
我要评论
正在加载评论信息......