@helloiampau/fastify-mongodb v0.0.4
fastify-mongodb
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'), {
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 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:
client
is theMongoClient
instanceObjectId
is theObjectId
classdb
is theDB
instance
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.