2017-10-26 13 views
1

나는 meteor-couchdb를 사용 중이며 API 호출이있을 때 db에 연결하고 필요한 작업을 수행하려고한다. API 호출이 다시 만들어 질 때"new CouchDB.Database (queueDb);"가 표시되면 오류가 발생합니다. 두 번째로

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

당신은'DBNAME = 새로운 CouchDB.Database ('DB_NAME')를 호출해야합니다 이것을 사용, 한 번만' 새 연결을 만드는 대신 연결을 다시 사용하십시오. 또한 API 호출이있을 때마다 새 연결을 만들 필요가 없으므로 몇 밀리 초를 절약 할 수 있습니다. Node.js 애플 리케이션은 일반적으로 오래 실행되는 프로세스이므로 지속적인 연결이 많은 의미를 갖습니다. – Molda

+0

하지만 API 호출을 기반으로 다른 클라우드 dbs에 연결해야합니다. 유성이 시작될 때 모든 dbs에 연결해야합니까? 이 경우, 새로운 DB가 추가되면, 유성은 새로 생성 된 DB의 인스턴스를 어떻게 얻을 것인가? – AnoopGoudar

답변

2

그것은 하나 개의 DB 서버에 연결하고 전화를 몇 번이나 상관없이 essentialy 서버에 하나 개의 연결이 없습니다 있도록 여러 데이터베이스 작업을 수행 할 수 있습니다 당신은 무엇을해야 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의 동적 생성을 처리 할 것입니다 리터를 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(); 
+0

예, 당신은 그것을 올바르게 이해했습니다. 하지만 '작업'과 같은 100 dbs가 있다면 100 개의 파일을 쓸 수 없습니다. 특정 cloudant 계정의 모든 dbs를 나열하고 유성 서버를 초기화하는 동안 연결할 수 있다면 동적으로 생성 된 dbs는 나열되지 않습니다. 서버를 중지하고 새 DB를 추가 할 때마다 다시 시작해야 할 수도 있습니다. 그렇지 않으면 DB 목록을 업데이트하는 Cloudant를 감시해야합니다. – AnoopGoudar

+0

@AnnopGoudar dbs의 동적 생성을위한 코드를 추가했습니다. 희망이 도움이됩니다. – Molda

+0

그러나 새로운 CouchDB.Database (dbname)를 호출하면 실패합니다. dbname이 동일한 경우 두 번째 그리고 결과가 오류 : '/ db_name/insert'라는 메소드가 이미 정의되었습니다 – AnoopGoudar