2016-11-07 81 views
1

中我建立一個組成部分通過NPM是消耗品執行MongoDB。應用程序需要連接到數據庫。如果用戶沒有在配置文件中指定詳細信息的數據庫URI,我的應用程序應該從應用程序本身的旋轉起來的MongoDB的實例。的Node.js從申請

我已經看到了如何MongoDB中融入的node.js,快遞,摩卡和許多其他圖書館很多教程,但都連接到一個已經運行的外部數據庫。

MongoDB的服務器被列爲所以安裝了一切的依賴關係的一部分,但我短上來的材料在網上如何做啓動數據庫的應用程序啓動時。

任何幫助將不勝感激。我懷疑的信息在那裏,但我有一個很難找到它:(

+1

數據庫在邏輯上是一個單獨的應用程序,它實際上是很好的單獨的節點應用和MongoDB的應用程序,讓他們「鬆散」耦合。這不是一個選項創建一個新的mongo數據庫服務器這樣的用戶沒有配置文件被指定?你不需要實現mongo db應用程序已經實現的更好的東西。 – levilime

+0

是的,我同意。根據需求安裝和創建新的mongodb服務器和數據集有多困難,幾乎沒有用戶輸入?只需將配置中的標誌置於自定義數據庫中,如果它不存在,則創建一個新的服務器。由於 –

+0

嘿尼古拉一世制定基於在評論你的要求的答案。祝你好運! – levilime

回答

2

命令啓動MongoDB是可在NPM mongodb page。添加​​和--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"庫,通過寫那裏已經由Larry Turtis或這裏mongodb - multiple instances規定的控制檯命令使用spawn功能爲「重生」的新數據庫實例。它看起來是這樣的,啓動的實例:

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

可以通過管道控制檯輸出到與此節點:

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 :

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