2016-11-07 53 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'); 
}