2017-10-26 1 views
1

私はmeteor-couchdbを使用していて、APIコールが行われたときにdbに接続しようとしていて、必要な操作を実行しています。 APIコールが再び行われたとき"新しいCouchDB.Database(queueDb);" 2回目のために

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

は、しかし、それはAPIの呼び出しに応じて、エラー

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

下に投げ、私はそれを接続する必要がDbとを選択することができるはずです。 私はノードの方法すなわちに

Cloudant.use('db_name'); 

をやってみました。しかし、その後流星は私のサーバー側のフレームワークであるように私は待つかMeteor.wrapAsync()同期非同期を使用して非同期機能を処理する必要があります。

API呼び出しが行われるたびに、dbに接続してアクションを実行するにはどうすればよいでしょうか?私が正しく流星CouchDBの実装を理解していれば

+0

をしたい、これを使用し、あなたのために

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

をDBSの動的な作成を扱うでしょうdbs.js;'一度だけ新しい接続を作成する代わりに接続を再利用します。また、api呼び出しがあるたびに新しい接続を作成する必要がないので、数ミリ秒節約できます。 Node.jsアプリは、通常は長時間実行されるプロセスなので、永続的な接続は非常に意味があります。 – Molda

+0

しかし、私はAPI呼び出しに基づいて異なるクラウドdbsに接続する必要があります。 流星が始まるときにすべてのdbに接続する必要がありますか?その場合、新しいDBが追加された場合、流星は新しく作成されたDBのインスタンスをどのように取得しますか? – AnoopGoudar

答えて

2

それは1デシベルサーバーに接続し、あなたが呼び出し回数に関係なく、essentialyサーバーへの1つの接続がないので、あなたが複数のデータベースで作業することができますあなたがすべき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(); 

追加のコードでは、ファイルLETのCALを持つことができますリットルそれどこでもあなたがあなたが `DBNAME =新しいCouchDB.Database( 'DB_NAME')を呼び出す必要があります

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

はい、あなたはそれを正しく理解しました。 しかし、私は100 dbsの 'タスク'のような場合、私はそのようなファイルを100書くことはできません。 特定のクラウドアカウントのすべてのdbsをリストし、流星サーバーを初期化しているときにそれに接続することができれば、動的に作成されたdbsもリストされません。新しいDBを追加するたびにサーバーを停止して再起動する必要があるかもしれません。また、dbリストを更新するCloudantを監視する必要があります。 – AnoopGoudar

+0

@AnnopGoudar dbsの動的作成用のコードを追加しました。それが役に立てば幸い。 – Molda

+0

しかし、新しいCouchDB.Database(dbname)を呼び出すと失敗します。 2回目は、dbnameが同じである場合です。結果はエラー エラー: '/ db_name/insert'という名前のメソッドが既に定義されています – AnoopGoudar

関連する問題