Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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 Mongoose-useDb(名称)不允许超过10个并发请求_Node.js_Mongodb - Fatal编程技术网

Node.js Mongoose-useDb(名称)不允许超过10个并发请求

Node.js Mongoose-useDb(名称)不允许超过10个并发请求,node.js,mongodb,Node.js,Mongodb,我们正在使用mongoose连接到MongoDB。最初创建了一个100个连接池,并使用mongoose方法连接到其他一些数据库 下面是代码片段 var url = require("url"); var connectRoute = require('connect-route'); var connect = require('connect'), app = connect.createServer(); var mongoose = require('mongoose'); v

我们正在使用mongoose连接到MongoDB。最初创建了一个100个连接池,并使用mongoose方法连接到其他一些数据库

下面是代码片段

var url = require("url");
var connectRoute = require('connect-route');
var connect = require('connect'),
    app = connect.createServer();

var mongoose = require('mongoose');
 var conn = mongoose.createConnection('mongodb://localhost:10040/first', {server: {poolSize: 100}});

 conn.on('error', console.error.bind(console, 'connection error:'));

 var Schema = mongoose.Schema;
 var MySchema = new Schema({
 user: String,
 pwd: String, roles: []
 },
 {strict: false}
 );
app.use(connectRoute(function (router){
    router.get('/get', function(req,res){
        var db2 = conn.useDb('second_DB');
        var data = db2.model('', MySchema, 'coll');
        data.update({name: "Janu"}, {$set: {"name": "test"}}, {upsert: true} , function (err, data,log) {
            //console.log(a.data.data );
            res.end(JSON.stringify(log.connectionId));
        });
    });
}));

app.listen(3000);
console.log('info','Connect server listening on port 3000 ' );
即使Poolsize设置为100,当发出10个以上的并发请求时,也会抛出警告

(节点)警告:检测到可能的EventEmitter内存泄漏。增加了11名听众。使用emitter.setMaxListeners()增加限制。

MongoDB版本-2.6.4 猫鼬版本-3.8.12


有人能帮助解释为什么会出现此警告吗?

函数
conn.useDb
创建一个新的连接对象并在其上添加一个事件侦听器。池大小不影响这一点

您的代码实际上有一个EventEmitter memoryleak。每次调用路由时,都会创建一个带有事件侦听器的新对象,并且该对象永远不会被删除

要解决此问题,请缓存conn.useDb的返回值

如果您有10个以上的数据库,可以在应用程序开始时通过以下方法增加侦听器的限制:

require('events').EventEmitter.defaultMaxListeners = 15;
或与

emitter.setMaxListeners()

在useDb('name',{noListener:true})时使用此选项

您可能希望进行设置,使每个
useDb
调用都不会创建新的连接对象。

使用useDb方法时,它会抛出警告。除此之外,没有其他方法会抛出警告。当我在上面的代码片段中注释行var db2=conn.useDb('second_DB')时,我没有得到警告。您是否找到了解决方案?更多信息: