第二次 "new CouchDB.Database(queueDb);" 时抛出错误

Throws error when "new CouchDB.Database(queueDb);" for the second time

我正在使用 meteor-couchdb 并尝试在进行 API 调用时连接到数据库并执行所需的操作。

dbName = new CouchDB.Database('db_name');

但是当再次调用 API 时,它会抛出以下错误

Error: A method named '/db_name/insert' is already defined

根据 API 调用,我应该能够 select 需要连接的 Db。 我尝试以节点方式做,即

Cloudant.use('db_name');

但是由于 Meteor 是我的服务器端框架,我需要使用 async await 或 Meteor.wrapAsync() 同步处理异步函数。

每当进行 API 调用时,连接到数据库并执行操作的建议方法是什么?

如果我正确理解 meteor CouchDB 实现,它会连接到一个数据库服务器并允许您使用多个数据库,因此无论您调用多少次,基本上都只有一个到服务器的连接 new CouchDB.Database('db_name');

你应该做的是:

// tasks.js
// create an instance of Tasks database only once 
var Tasks = new CouchDB.Database('tasks');
// you may want to export it so you can use it elsewhere
exports.Tasks = Tasks;

// blabla.js
// in another file require the file
var Tasks = require('path/to/tasks.js').Tasks;
// and use it when needed
Tasks.find();

回答下面评论的附加代码

您可以拥有一个文件,让我们称之为 dbs.js,它可以为您动态创建数据库

var dbs = {};

exports.getDb = function(name){
    if (!dbs[name])
        dbs[name] = new CouchDB.Database(name);

    return dbs[name];
};

然后随处使用它

var Tasks = require('dbs.js').getDb('Tasks');
Tasks.find();