Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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-使用两个不同的uri_Node.js_Asynchronous_Mongoose - Fatal编程技术网

Node.js Mongoose-使用两个不同的uri

Node.js Mongoose-使用两个不同的uri,node.js,asynchronous,mongoose,Node.js,Asynchronous,Mongoose,我在创建Mongoose连接时遇到了异步任务问题。我将在一个数组中存储n个连接,我希望将创建的每个连接对象推送到一个对象 在我的代码中,只有最后一个连接正在推送到对象 我的代码: async function createMongooseConnctions(mongoUrl, opts){ var mongooseConnections = {}; for(const value of mongoUrl){ var conn = awai

我在创建Mongoose连接时遇到了异步任务问题。我将在一个数组中存储
n个连接
,我希望将创建的每个
连接对象
推送到一个
对象

在我的代码中,只有最后一个
连接
正在推送到
对象

我的代码:

    async function createMongooseConnctions(mongoUrl, opts){
       var mongooseConnections = {};
       for(const value of mongoUrl){
          var conn = await mongoose.connection.openUri(value, opts)
          let host = conn.host
          mongooseConnections[host] = conn
       }
    }
我也很难把它推到我的对象上,因为我似乎无法复制用来制作动态键的。 如果我一直在做的事情中还有其他更有效的方法的话,那也太好了

编辑


创建后我记录了conn对象,它创建了n个不同的连接对象,但是当我试图将它们推送到我的JSON对象时,最后一个连接是唯一一个推送的连接(n次,取决于uri的数量)

什么包含mongoUrl

您确定每个连接的conn.host都不同吗?否则,它将在相同的对象关键帧中设置值

====================================

openUri可能不会每次都创建另一个连接。我认为它必须使用相同的连接对象

尝试使用以下各项创建真正的新mongo连接:

mongoose.createConnection()

它将为每个连接返回一个新的连接对象

您应该尝试以下操作:

async function createMongooseConnctions(mongoUrl, opts){
       var mongooseConnections = {};

       for(const value of mongoUrl){
          (function(){
               var conn = await mongoose.connection.openUri(value, opts)
               let host = conn.host
               mongooseConnections[host] = conn
         })(value)
       }
    }

希望它能对您有所帮助。

这是一个MongoDB uri数组,是的,我在创建conn对象后记录了它,它创建了两个不同的connections对象,但当我试图将它们推送到我的JSON对象时,最后一个连接是唯一一个推送的连接(n次,取决于uri的数量),请参见编辑,您必须为每个想要的连接调用createConnection而不是openUri,但这将返回一个错误Db.prototype.authenticate方法将在下一个主要版本3.x中不再可用,因为MongoDB 3.6将只允许对admin Db中的用户进行身份验证,并且不再允许在套接字上使用多个凭据。请使用MongoClient.connect进行身份验证,并使用身份验证凭据:var mongoose=require(“mongoose”);var dbA=newmongoose.mongoose();var dbB=newmongoose.mongoose();var connA=dbA.connect(“mongodb://localhost:27017/a"); var connB=dbB.connect(“mongodb://localhost:27018/b");如果它不起作用,则更改=>让conn=等待mongoose.connection.openUri(值,opts);//var=>let