Node.js从应用程序内运行MongoDB

时间:2016-11-07 21:25:53

标签: node.js mongodb npm local-database

我正在构建一个可供NPM使用的组件。应用程序需要连接到数据库。如果用户没有在配置文件中指定数据库uri的详细信息,我的应用程序应该从应用程序本身中启动一个mongoDB实例。

我已经看过很多关于如何将mongoDB集成到node.js,express,mocha和许多其他库中的教程,但都连接到已经运行的外部数据库。

mongoDB服务器作为依赖项的一部分被包含在内,因此与其他所有服务器一起安装,但是我在网上找到了关于如何在应用程序启动时启动数据库的内容。

非常感谢任何帮助。我怀疑这些信息是在那里,但我很难找到它:(

2 个答案:

答案 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"}