“new CouchDB.Database(queueDb);”时引发错误第二次

时间:2017-10-26 06:22:54

标签: javascript node.js meteor couchdb cloudant

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

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

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

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

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

Cloudant.use('db_name');

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

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

1 个答案:

答案 0 :(得分:2)

如果我正确理解流星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来为你动态创建dbs

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();