【问题标题】:How to handle multiple asynchronous connections in Mongoose如何在 Mongoose 中处理多个异步连接
【发布时间】:2016-05-25 08:01:21
【问题描述】:

必须改进我当前的 Express/Mongoose 服务器,认为我可能需要使用 mongoose.createConnection 而不是 mongoose.connect,并且可能需要维护一系列连接,并在连接终止时删除索引 - 所以我需要一些输入来自你们的集体意识。

脚本基本上是这样构建的:

// Constants
var MONGO_SERVER = "mongodb://user:pass@localhost/dbname";

// Connection Handlers
function checkConnection(cb) {
    if (mongoose.Connection.STATES.connected !== mongoose.connection.readyState) connectMongo(cb());
    else cb();
}
function connectMongo(cb) {
    db = mongoose.connect(MONGO_SERVER,function(err){if (err) throw err; else if (typeof cb==="function") cb();});
}

// Setup connection
mongoose = require('mongoose');
var db = {};
connectMongo();
Schema = mongoose.Schema;
ObjectId = Schema.ObjectId;

// Schemas...
var UsersSchema = new Schema({
    display_name    : String,
    email           : String
}); 
//...
var users = mongoose.model('Users',UsersSchema);

//...
function login(conn,obj,link_id) {
    checkConnection(function() {
        try {   
            //...
        }
        catch (ex) {
            console.log(ex.message);
        }
    });
}

现在,这行得通,但看到一些性能问题和一些查询似乎挂起告诉我需要重新塑造这种类型的执行,也许让 var db = {} 成为一个数组,并使用 createConnection push到最后。不需要直接的答案,只需朝正确的方向轻推即可。

谢谢。

【问题讨论】:

标签: node.js mongodb express asynchronous mongoose


【解决方案1】:

来自我的评论:

Mongoose 默认使用连接池处理异步连接。您可以像这样指定池大小:

var options = {
  server: { poolSize: 10 } // default is '5'
}

mongoose.connect('mongodb://username:password@host:port/database', options);

将使用连接池中的连接,然后在事务完成后将其释放回池中。

【讨论】:

  • 干杯阿什利 - 这几乎就是我需要知道的!来自其他页面的提示 Deepak 非常有用。随着选项对象中的更改,现在工作更加顺畅。
  • 没问题,如果你想让它更干净一点(如果你没有其他选择),你也可以像这样将它添加到 mongo 连接 uri:mongodb://username:password@host:port/database?poolSize=4
猜你喜欢
  • 2018-08-21
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 2016-06-18
  • 2020-03-07
相关资源
最近更新 更多