我正在构建一个可供NPM使用的组件。应用程序需要连接到数据库。如果用户没有在配置文件中指定数据库uri的详细信息,我的应用程序应该从应用程序本身中启动一个mongoDB实例。
我已经看过很多关于如何将mongoDB集成到node.js,express,mocha和许多其他库中的教程,但都连接到已经运行的外部数据库。
mongoDB服务器作为依赖项的一部分被包含在内,因此与其他所有服务器一起安装,但是我在网上找到了关于如何在应用程序启动时启动数据库的内容。
非常感谢任何帮助。我怀疑这些信息是在那里,但我很难找到它:(
答案 0 :(得分:3)
您可以考虑开始subprocess
。所以让Node运行mongo作为外部程序。这样,您可以为符合该条件的任何用户创建新的mongodb实例。您可以使用节点"child process"
库,并使用spawn
函数来生成'一个新的数据库实例,通过编写控制台命令,如Larry Turtis或此处mongodb - multiple instances所述。它可能看起来像这样,启动实例:
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');
}
答案 1 :(得分:2)
NPM mongodb page上提供了引导mongoDB的命令。添加--fork
和--logpath
,因为我假设您希望它在后台启动。
mongod --dbpath=/data --port 27017 --fork --logpath /var/log/mongod.log
您可以将此作为npm启动脚本的一部分包含在package.json中:
"scripts": {"start": "mongod --dbpath=/data --port 27017 --fork --logpath /var/log/mongod.log"}