Git Product home page Git Product logo

fastify-mongodb's Introduction

@fastify/mongodb

CI NPM version js-standard-style

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 is v6.x.x.

If you do not provide the client by yourself (see below), the URL option is required.

Install

npm i @fastify/mongodb

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', async function (req, reply) {
  // Or this.mongo.client.db('mydb').collection('users')
  const users = this.mongo.db.collection('users')

  // if the id is an ObjectId format, you need to create a new ObjectId
  const id = new this.mongo.ObjectId(req.params.id)
  try {
    const user = await users.findOne({ id })
    return user
  } catch (err) {
    return err
  }
})

fastify.listen({ port: 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
  })

Notes:

  • the passed client connection will not be closed when the Fastify server shuts down.
  • in order to terminate the MongoDB connection you have to manually call the fastify.close method (for example for testing purposes, otherwise the test will hang).
  • mongodb connection timeout is reduce from 30s (default) to 7.5s in order throw error before fastify plugin timeout.

Reference

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

The ObjectId class can also be directly imported from the plugin as it gets re-exported from mongodb:

const { ObjectId } = require('@fastify/mongodb')

const id = new ObjectId('some-id-here')

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.

fastify-mongodb's People

Contributors

dependabot[bot] avatar mcollina avatar delvedor avatar fdawgs avatar greenkeeper[bot] avatar climba03003 avatar eomm avatar dependabot-preview[bot] avatar jsumners avatar uzlopak avatar cemremengu avatar lependu avatar zhaoyao91 avatar ishibi avatar sebdeckers avatar skellla avatar wedgwood avatar jorisdugue avatar github-actions[bot] avatar lemonclown avatar zekth avatar allevo avatar megaxayda avatar salmanm avatar pip77 avatar frikille avatar pacodu avatar mirchow avatar mihaur avatar johnwebbcole avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.