请教大家一下,我再新书node.js实战出现的问题
发布于 9个月前 作者 JackWon 458 次浏览

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

我不知道哪里出了问题,这是node.js实战第一章出现的问题

6 回复

你就截这么一小段,你自己看看是不是书上内容和实际版本有问题,express也经历了不少改动。

就是数据库已经连接了。。。 他好像每次请求数据库都建立链接了是吗,一个进程只要连一次数据库就好了,除非你断开了

这个错误 一般就是代码块闭合 写错了 就是这个 “}”写错地方了,仔细检查下代码

这是db.js var settings = require(‘…/settings’), Db = require(‘mongodb’).Db, Connection = require(‘mongodb’).Connection, Server = require(‘mongodb’).Server; module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT),{safe: true});

这是user.js var mongodb = require(‘./db’);

function User(user){ this.name = user.name; this.password = user.password; this.email = user.email; };

module.exports = User;

User.prototype.save = function(callback){ var user = { name: this.name, password: this.password, email: this.email };

mongodb.open(function(err, db){
    if (err){
        mongodb.close();
        return callback(err);
    }
    db.collection('users',function(err, collection){
        if (err){
            mongodb.close();
            return callback(err);
        }
        collection.insert(user, {
            safe: true
        }, function(err, user){
            mongodb.close();
            if (err){
                return callback(err);
            }
            callback(null, user[0]);
        });
    });
});

};

User.get = function(name, callback){ mongodb.open(function(err,db){ if (err){ return callback(err); } db.collection('users’, function (err, collection) { if (err) { mongodb.close(); return callback(err); } collection.findOne({ name: name },function (err,user) { if (err) { return callback(err) } callback(null,user); }); }); }); };

每操作一次都进行了打开连接>操作数据>关闭连接,这样如果同时多个操作进行就会报错了,数据库的连接打开后不用关闭。

回到顶部