Error: db object already connecting
今天遇到一个问题,在通过node连接mongodb的时候会报错:
db object already connecting, open cannot be called multiple times
主要原因是,有一个db对象已经与数据库连接,就是要求db.open()之后必须要db.close()才能建立下一个链接。但是在并发请求的情况下,这种情况很难避免。而为每个action单独去创建db对象又比较恶心,所以把主程序的代码改写下,数据库始终保持连接状态,然后把db对象传给各个action。
代码如下:
var express = require('express');
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var db_name = 'test';
var db_host = '127.0.0.1'; // 数据库地址
var db_port = '27017'; // 数据库端口
var db = new Db(db_name, new Server(db_host, db_port, {}), {w: 1});
var app = express();
//将db对象传入
app.get('/categories', categories.index(db));
app.get('/categories/:_id', categories.index(db));
app.post('/categories/add', categories.add(db, additional));
//打开数据库连接
db.open(function(err, db) {
if (err) {
db.close();
return;
}
//启动httpserver
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
});