Tiny mongodb decorator providing CRUD-style DB-methods
$ pnpm add @uscreen.de/fastify-mongo-crudAdding @uscreen.de/fastify-mongo-crud also adds fastify-mongodb as direct dependency.
Note: You still need to register
mongodbprior tocrudas seen in example below. This is due to encapsulation of fastify plugins assuming you will want to resuse samefastify.mongoaccross your application.
Setup within a plugins/mongo.js file:
import fp from 'fastify-plugin'
import mongodb from '@fastify/mongodb'
import crud from '@uscreen.de/fastify-mongo-crud'
export default fp((fastify, opts, next) => {
/**
* 1) setup mongodb connection
*/
fastify.register(mongodb, { url: opts.mongoUri })
/**
* 2) setup CRUD factory
*/
fastify.register(crud)
/**
* 3) proceed
*/
next()
})Usage within a services/accounts.js file:
/**
* let's write a classic CRUD service
*/
export default (fastify, opts, next) => {
const accounts = fastify.crud('accounts')
/**
* plug in some appropiate authentication
* middleware - of course!
*
* plus: add schemas to routes.
*/
/**
* create
*/
fastify.post('/accounts', async (req) => {
return { account: await accounts.create(req.body) }
})
/**
* read
*/
fastify.get('/accounts/:id', async (req) => {
return { account: await accounts.read(req.params.id) }
})
/**
* update
*/
fastify.put('/accounts/:id', async (req) => {
return { account: await accounts.update(req.params.id, req.body) }
})
/**
* delete
*/
fastify.delete('/accounts/:id', async (req) => {
return { account: await accounts.delete(req.params.id) }
})
/**
* list
*/
fastify.get('/accounts', async () => {
return { accounts: await accounts.list() }
})
next()
}- embed and configure fastify-mongodb and expose
fastify.mongofrom within this module, if not installed in parent
- upgrade to fastify@5.x
- switch to ESM only
- upgrade to fastify@4.x
- upgraded to fastify 3.x
- added implicit timestamps for record "created" & "modified"
- added tests
- init
Licensed under MIT.
Published, Supported and Sponsored by u|screen