Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@fastify/mongodb

Package Overview
Dependencies
Maintainers
18
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fastify/mongodb

Fastify MongoDB connection plugin

  • 6.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
5.3K
decreased by-18.75%
Maintainers
18
Weekly downloads
 
Created
Source

@fastify/mongodb

CI NPM version Known Vulnerabilities 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 v4.x.x.

If you do not 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').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 = this.mongo.ObjectId(req.params.id)
  users.findOne({ id }, (err, user) => {
    if (err) {
      reply.send(err)
      return
    }
    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
  })

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.

Keywords

FAQs

Package last updated on 14 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc