rm

rapid-mongo

Download and run mongodb on a non-standard port

Showing:

Popularity

Downloads/wk

16

GitHub Stars

3

Maintenance

Last Commit

4yrs ago

Contributors

4

Package

Dependencies

6

Size (min+gzip)

143.3KB

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Readme

rapid-mongo

MongoDB for the lazy - Download, unpack and run mongodb from your program.

Supports most Linux, OSX and Win32.

As of version 1.1.0 temporary download files won't be deleted after install unless deleteTemporaryFiles option is set to true.

Synopsis

short example


var RapidMongo = require('rapid-mongo');

(new RapidMongo()).start().then(function (port) {
    console.log("Hurray! mongodb is now installed and running on port " + port);
    console.log("And it will stop running when this script ends");
}).catch(console.error);

Download can take a while, the following example outputs the progress and the output from mongod:

longer example


var RapidMongo = require('rapid-mongo'),
    rapid = new RapidMongo({
        installPath: "./mongo",
        version: "3.2.0"
    });

// verbose event for rapid-json messages
rapid.on("verbose", console.log);

// stdout/stderr events for mongod process output
rapid.on("stdout", console.log);
rapid.on("stderr", console.error);

// progress event for mongod download progress
rapid.on("progress", function (percent, mb) {
    console.log("Download progress: " + percent + "% " + mb + "MB");
});

// Start MongoDB
rapid.start().then(function (port) {
    console.log("Mongo is running on 127.0.0.1:" + port);
}).catch(console.error);

Description

Designed for rapid development, proof of concept, and smaller projects.

rapid-mongo is a module for the automatic download, unpacking and running of mongodb directly from your program. If no port is specified rapid-mongo will pick an available port from a range.

The mongod process will end when node exits.

Unfortunately it pains me to say, I have had to resort to using a watcher process, mongodb will be killed by tie-process.js once your parent process has ended.

Options

RapidMongo is constructed with an Object containing the following options.

installPath

installPath - where mongodb should be installed. Optional, defaults to <parent script dir>/mongo

version

version - The version of mongodb to download, defaults to "3.2.0".

dbpath

dbpath - The location for mongod to store the database. Defaults to the installPath + "/data". This parameter is optional.

downloadDir

downloadDir - Location to download mongo package to.

deleteTemporaryFiles

deleteTemporaryFiles - Boolean, set to true to remove files after install.

port

port - The port that mongod will listen on. This is optional, if not specified then a free port will be selected from a range, see startPort and endPort.

startPort

startPort - If port is not specified then search from this port for a free port to use.

endPort

endPort - If port is not specified then search until this port for a free port to use.

args

args is an optional parameter to pass arbitrary options to the mongod process.

This option should be an object with command line arguments supplied with the key as the flag and the value as the argument value, use the value true to enable a flag, and false to disable a flag.

Example:

var RapidMongo = require('rapid-mongo'),
    rapid = new RapidMongo({
        installPath: "./mongo",
        version: "3.2.0",
        args: {
            "--upgrade": true,
            "--config": "./mongo.conf"
        }
    });

In the arguments added to mongod would be:

--upgrade --config ./config.conf

The args --dbpath and --port are provided automatically. If you want to override these values then use either the dbpath and port options to the constructor, or use the args values --dbpath and --port. If you wish to disable these options entirely then set --dbpath or --port to false.

arch

Set arch to override the detected architecture, options: ia32 or x64.

platform

Set platform to override the detected platform, options: win32, darwin, osx, linux or elementary OS.

httpOpts

Options to pass to http library, example:

httpOpts: {
    agent: new https_proxy_agent("https://127.0.0.1:8080")
}

download()

Optionally call download() to download mongo. No need to call this function directly, just call start().

install()

Optionally call install() to download and unpack mongo without running. This is called by start() so usually there is no reason to call this method.

start()

After constructing a RapidMongo object using the options above, you can start() your mongo database. This function returns a promise which resolves to the port used by mongod. If mongod fails to start then the promise will be rejected with the error.

Example:

rapid.start().then(function (port) {
    console.log("Mongo is running on 127.0.0.1:"+port);
}).catch(console.error);

stop()

Stop can be used to programaticly end the mongodb process. The method returns a Promise which is resolved with the exit code of the process.

Example:

var RapidMongo = require('./index')
var rapid = new RapidMongo()

rapid.start()
  .then((port) => {
    console.log(`Mongo is running on 127.0.0.1:${port}`)
    setTimeout(() => {
      console.log('Stopping mongod')
      rapid
        .stop()
        .then((res) => console.log('mongod stopped with code', res))
    }, 5000)
  })
  .catch(console.error)

After successful installation, the mongo archive will automatically be removed.

Events

RapidMongo extends the EventEmitter class. The following events are available from the .on() methods.

verbose

Verbose messages from rapid-mongo. Use This to find out what rapid-mongo is currently doing.

progress

Used during download to indicate progress, function(percent, mb).

stdout

This event fires for each line from mongod's stdout. By default this will be logging from the process.

stderr

This event fires for each line from mongod's stderr.

debug

This event fires for any debugging inside the rapid-mongo module.

exit

This event fires when the mongod process exits.

Notes on Other Modules

I looked for other modules with similar functionality before writing this module, and I had found mongodb-prebuilt. Unfortunately at the time of writing mongo-prebuilt was not fully functional. Additionally its focus was on command line access via the shell, although it has a programmable interface I was not able to get it to work correctly, and it wanted to fork and detach the mongod process.

This module is simpler and only provides the programmable interface.

I used code modified from mongodb-download to determine and download the correct mongo archive.

If you are looking for a module to simply download mongodb, then look at mongodb-download.

Node support

This module was developed on node v5.10.0 compatibility with older versions of node is unknown, however few if any ES6 features were used.

Notes on Cross-Platform Compatibility

Known working on Ubuntu and most Linux, OSX, Windows.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100