2016-11-07 3 views
1

NPM에서 사용할 수있는 구성 요소를 구축 중입니다. 응용 프로그램이 데이터베이스에 연결해야합니다. 사용자가 설정 파일에서 데이터베이스 uri에 대한 세부 사항을 지정하지 않으면, 응용 프로그램 자체에서 mongoDB의 인스턴스를 스핀 업해야합니다.Node.js는 응용 프로그램 내에서 MongoDB를 실행합니다.

mongoDB를 node.js, express, mocha 및 기타 여러 라이브러리에 통합하는 방법에 대한 자습서가 많이 있지만, 모두 이미 실행중인 외부 데이터베이스에 연결됩니다.

mongoDB 서버가 종속성의 일부로 포함되어 있으므로 다른 모든 항목과 함께 설치되지만 응용 프로그램이 시작될 때 데이터베이스를 부팅하는 방법에 대한 내용은 온라인 자료에서 짧게 나와 있습니다.

도움을 주시면 감사하겠습니다. 나는 정보가 거기에 의심하지만 나는 MongoDB를가 NPM mongodb page로 볼 수 있습니다 부팅

+1

데이터베이스는 그들에게 "느슨하게"결합 가지고, 그것은 노드 응용 프로그램과 MongoDB를 응용 프로그램을 분리해서 실제로 좋은 데요, 논리적으로 별도의 응용 프로그램입니다. 구성 파일이 지정되지 않은 사용자를 위해 새로운 mongo db 서버를 만드는 옵션이 아닌가? mongo db 응용 프로그램에 의해 이미 더 잘 구현 된 항목을 구현할 필요가 없습니다. – levilime

+0

예, 동의합니다. 새로운 mongodb 서버와 데이터 셋을 사용자 입력없이 거의 필요없이 설치 및 생성하는 것이 얼마나 어렵습니까? 커스텀 DB에 configs 플래그가 있고, 존재하지 않으면 새로운 서버를 생성하십시오. 감사합니다 –

+0

안녕하세요 니콜라스 나는 의견에 귀하의 요구 사항을 기반으로 답변을 공식화. 행운을 빕니다! – levilime

답변

2

:(명령 그것을 찾는 힘든 시간을 보내고 있습니다. --fork--logpath 추가 난 당신이 백그라운드에서 시작한다고 가정하기 때문에 .

mongod --dbpath=/data --port 27017 --fork --logpath /var/log/mongod.log 

당신은 package.json에 NPM 시작 스크립트의 일부로이있을 수 있습니다 :

"scripts": {"start": "mongod --dbpath=/data --port 27017 --fork --logpath /var/log/mongod.log"} 
3

당신은 subprocess를 시작으로 볼 수 그래서 노드 실행시키는. 외부 프로그램으로 mongo. 이렇게하면 해당 기준에 맞는 모든 사용자에 대해 새로운 mongodb 인스턴스를 만들 수 있습니다. 예를 들어, 노드 "child process" 라이브러리를 사용할 수 있으며 spawn 함수를 사용하여 Larry Turtis 또는 여기 mongodb - multiple instances에 명시된대로 콘솔 명령을 작성하여 새 데이터베이스 인스턴스를 '스폰'할 수 있습니다. 그것은 다음과 같이 할 수있는 인스턴스를 시작합니다 :

pipe.stdout.on('data', function (data) { 
     printback(data.toString('utf8')); 
    }); 

    pipe.stderr.on('data', (data) => { 
     printback(data.toString('utf8')); 
    }); 

    pipe.on('close', (code) => { 
     callback('Process exited with code: '+ code); 
    }); 

을 그리고 파이프 참조를 유지하고이 작업을 수행하여 인스턴스를 실행하는 MongoDB를 죽일 :

const spawn = require('child_process').spawn; 
const pipe = spawn('mongod', ['--dbpath=<LOCATION>', '--port', '<PORT>']) 

당신은 파이프 콘솔 출력이와 노드 할 수 있습니다 :

static end_pipe(pipe) { 
    pipe.kill('SIGINT'); 
}