Я использую meteor-couchdb и пытаюсь подключиться к db при вызове API и выполнить требуемую операцию.
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 wait или Meteor.wrapAsync().
Каким будет предлагаемый подход для подключения к db и выполнения действий при каждом вызове API?
Если я правильно понимаю реализацию метеор CouchDB, он подключается к одному серверу db и позволяет работать с несколькими базами данных, поэтому необходимо одно единственное подключение к серверу независимо от того, сколько раз вы вызываете 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();
dbName = new CouchDB.Database('db_name');
только один раз и повторно используйте соединение вместо создания нового. Вы также экономите несколько миллисекунд, поскольку вам не нужно создавать новое соединение каждый раз, когда происходит вызов API. Приложения Node.js обычно долго выполняются, поэтому постоянное соединение имеет большой смысл.