素材牛VIP会员
关于nodejs操作数据库的一个疑问?
 in***ex  分类:Node.js  人气:859  回帖:2  发布于6年前 收藏

不论是链接mongodb 还是连接mysql
基本上都是在model中先打开数据库 然后在关闭。
例如:

//打开
mongodb.open(function(err, db) {
db.collection('users', function(err, collection) {
    //....
    //操作完成及时关闭
    mongodb.close();
    callback(err, user);
  });
});

});

一个页面可能就需要从不同的表或集合都取数据,多次调用model中的不同操作。
那这样不就会进行多次打开,多次关闭了。
怎么样做能够解决这样的问题?

 标签:node.js

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv4 码徒
ji***ca JS工程师 6年前#1

Node 并不为每个请求创建单独的进程/线程,你可以只在程序启动的时候开打一个 Mongo 数据库连接,然后保存到全局变量中。

// db.js
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/xxoo", {}, function(err, db) {
  if(err) {
    console.log('Cannot connect to MongoDB.');
    process.exit(1);
  }
  exports.accounts = db.collection('accounts');
});


// routers/account.js
var db = require("../db");

exports.signup = function(req, res) {

  // ...

  db.accounts.insert({
    'username': username,
    'passwd': passwd
  }, function() {
    res.redirect('/');
  });
};
Lv6 码匠
yj***23 站长 6年前#2

用连接池来管理,比如https://github.com/coopernurse/node-pool,用这个你可以很方便的封装一个对mongodb的连接池

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取