我们使用 mongoose 连接到 MongoDB。最初创建了一个包含 100 个连接的池,并使用 mongoose 方法连接到其他数据库 useDb
下面是代码片段
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 个并发请求时也会抛出警告 as
( Node )警告:检测到可能的 EventEmitter 内存泄漏。添加了 11 个听众。使用 emitter.setMaxListeners() 增加限制。
MongoDB 版本 - 2.6.4 Mongoose 版本 - 3.8.12
任何人都可以帮忙解释为什么会收到此警告吗??
最佳答案
函数 conn.useDb 创建一个新的连接对象并在其上添加一个事件监听器。 Poolsize 的大小对此没有影响。
您的代码实际上存在 EventEmitter 内存泄漏。每次调用路由时,都会创建一个带有事件监听器的新对象,并且永远不会删除。
要解决您的问题:缓存 conn.useDb 的返回值。
如果你有超过 10 个数据库,你可以在应用程序开始时增加监听器的限制:
require('events').EventEmitter.defaultMaxListeners = 15;
或与
emitter.setMaxListeners()
关于node.js - Mongoose - useDb(name) 不允许超过 10 个并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300584/
我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby常量:Content2而不是content2。Aconstantnamestart
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
“输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
这个问题在这里已经有了答案:Whatdoes`if__FILE__==$0`meaninRuby(6个答案)关闭6年前。我在审查Ruby代码时偶然发现了这个语法。代码是:if__FILE__==$PROGRAM_NAME#somecode...end我想__FILE__是一个变量,可以让我获取我所在文件的名称?但是$PROGRAM_NAME简化了什么?另外,为什么这个if语句是必需的,因为程序可以使用或不使用它?
我知道还有其他相同的问题,但他们没有解决我的问题。我不断收到错误:Aws::Errors::MissingRegionErrorinBooksController#create,缺少区域;使用:region选项或将区域名称导出到ENV['AWS_REGION']。但是,这是我的配置开发.rb:config.paperclip_defaults={storage::s3,s3_host_name:"s3-us-west-2.amazonaws.com",s3_credentials:{bucket:ENV['AWS_BUCKET'],access_key_id:ENV['AWS_ACCE
我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:
我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro
我遇到了一些Ruby代码,我试图理解为什么变量在initialize方法声明中的名称末尾有冒号。冒号有什么原因吗?attr_reader:var1,:var2definitialize(var1:,var2:)@var1=var1@var2=var2end 最佳答案 那些是关键字参数。您可以按名称而非位置使用它们。例如ThatClass.new(var1:42,var2:"foo")或ThatClass.new(var2:"foo",var1:42)Anarticleaboutkeywordargumentsbythoughtbot
我希望生成一个链接,该链接的前缀附加到命名路由本身。像这样显示路径“/old/recipes”:recipes_path(:prefix=>"old/")#thecorrectwayshouldshow"/old/recipes"我不想动routes.rb文件,而是修改带前缀的命名路由。这可能吗?您将如何正确地做到这一点?编辑:我正在使用Rails3。添加可选前缀的原因是我也想使用普通的recipes_path。所以我想同时使用“/recipes”和“/old/recipes”。 最佳答案 如果您不想触及路由文件,您将会遇到很多麻烦
在我的路线文件中我有:match'graphs/(:id(/:action))'=>'graphs#(:action)'如果是GET请求(工作)或POST请求(不工作),我想匹配它我知道我可以使用以下方法在资源中声明POST请求:post'/'=>:show,:on=>:member但是我怎样才能为比赛做到这一点呢?谢谢。 最佳答案 如果你同时想要POST和GETmatch'graphs/(:id(/:action))'=>'graphs#(:action)',:via=>[:get,:post]编辑默认值可以设置如下match'g