Fastify MongoDB connection plugin
Clone or download
cemremengu Merge pull request #63 from fastify/greenkeeper/@types/node-10.12.11
chore(package): update @types/node to version 10.12.11
Latest commit d7b039f Dec 2, 2018

README.md

fastify-mongodb

Greenkeeper badge

js-standard-style Build Status

Fastify MongoDB connection plugin, with this you can share the same MongoDb connection pool in every part of your server.

Under the hood the official mongodb driver is used, the options that you pass to register will be passed to the Mongo client. The mongodb driver version is 3.

If you don't provide the client by yourself (see below), the url option is required.

Install

npm i fastify-mongodb --save

Usage

Add it to your project with register and you are done!

const fastify = require('fastify')()

fastify.register(require('fastify-mongodb'), {
  // force to close the mongodb connection when app stopped
  // the default value is false
  forceClose: true,
  
  url: 'mongodb://mongo/mydb'
})

fastify.get('/user/:id', function (req, reply) {
  // Or this.mongo.client.db('mydb')
  const db = this.mongo.db
  db.collection('users', onCollection)

  function onCollection (err, col) {
    if (err) return reply.send(err)

    col.findOne({ id: req.params.id }, (err, user) => {
      reply.send(user)
    })
  }
})

fastify.listen(3000, err => {
  if (err) throw err
})

You may also supply a pre-configured instance of mongodb.MongoClient:

const mongodb = require('mongodb')
mongodb.MongoClient.connect('mongodb://mongo/db')
  .then((client) => {
    const fastify = require('fastify')()

    fastify.register(require('fastify-mongodb'), { client: client })
      .register(function (fastify, opts, next) {
        const db = fastify.mongo.client.db('mydb')
        // ...
        // ...
        // ...
        next()
      })
  })
  .catch((err) => {
    throw err
  })

Note: the passed client connection will not be closed when the Fastify server shuts down.

Reference

This plugin decorates the fastify instance with a mongo object. That object has the following properties:

The db property is added only if:

  • a database string option is given during the plugin registration.
  • the connection string contains the database name. See the Connection String URI Format

A name option can be used in order to connect to multiple mongodb clusters.

const fastify = require('fastify')()

fastify
  .register(require('fastify-mongodb'), { url: 'mongodb://mongo1/mydb', name: 'MONGO1' })
  .register(require('fastify-mongodb'), { url: 'mongodb://mongo2/otherdb', name: 'MONGO2' })

fastify.get('/', function (req, res) {
  // This collection comes from "mongodb://mongo1/mydb"
  const coll1 = this.mongo.MONGO1.db.collection('my_collection')
  // This collection comes from "mongodb://mongo2/otherdb"
  const coll2 = this.mongo.MONGO2.db.collection('my_collection')
  // ...
  // ...
  // do your stuff here
  // ...
  // ...
  res.send(yourResult)
})

Acknowledgements

This project is kindly sponsored by:

License

Licensed under MIT.