node package manager


npm version Build Status Dependencies Status DevDependencies Status


This is a plugin to share a common MongoDB connection pool across the whole Hapi server.

Options can be a single object with the following keys or an array of the same kind if you need multiple connections :

  • url: Optional. MongoDB connection string (eg. mongodb://user:pass@localhost:27017).
    • defaults to mongodb://localhost:27017
  • settings: Optional. Provide extra settings to the connection, see documentation.
  • decorate: Optional. Rather have exposed objects accessible through server and request decorations. You cannot mix different types of decorations.
    • If true, server.mongo or request.mongo
    • If it's a string, server.<string> or request.<string>

Several objects are exposed by this plugin :

  • db : connection object to the database, if an array was provided for the configuration, it will be an array of connections in the same order
  • lib : mongodb library in case you need to use it
  • ObjectID : mongodb ObjectID constructor in case you need to use it

Usage example :

const Hapi = require('hapi');
const Boom = require('boom');
const dbOpts = {
    url: 'mongodb://localhost:27017/test',
    settings: {
        poolSize: 10
    decorate: true
const server = new Hapi.Server();
    register: require('hapi-mongodb'),
    options: dbOpts
}, function (err) {
    if (err) {
        throw err;
    server.route( {
        method: 'GET',
        path: '/users/{id}',
        handler(request, reply) {
            const db = request.mongo.db;
            const ObjectID = request.mongo.ObjectID;
            db.collection('users').findOne({  _id: new ObjectID( }, function (err, result) {
                if (err) {
                    return reply(Boom.internal('Internal MongoDB error', err));
    server.start(function() {
        console.log(`Server started at ${}`);