sql-mapper Fastify Plugin
The @platformatic/sql-mapper package exports a Fastify plugin that can be used out-of the box in a server application.
A connectionString option must be passed to connect to your database.
The plugin decorates the server with a platformatic object that has the following properties:
db— the DB wrapper object provided by@databasessql— the SQL query mapper object provided by@databasesentities— all entity objects with their API methodsaddEntityHooks— a function to add a hook to an entity API method
The plugin also decorates the Fastify Request object with the following:
platformaticContext: an object with the following two properties:app, the Fastify application of the given routereply, the FastifyReplyinstance matching that request
Usage
'use strict'
const Fastify = require('fastify')
const mapper = require('@platformatic/sql-mapper')
async function main() {
const app = Fastify({
logger: {
level: 'info'
}
})
app.register(mapper.plugin, {
connectionString: 'postgres://postgres:[email protected]/postgres'
})
app.get('/all-pages', async (req, reply) => {
// Optionally get the platformatic context.
// Passing this to all sql-mapper functions allow to apply
// authorization rules to the database queries (amongst other things).
const ctx = req.platformaticContext
// Will return all rows from 'pages' table
const res = await app.platformatic.entities.page.find({ ctx })
return res
})
await app.listen({ port: 3333 })
}
main()
TypeScript support
In order for this module to work on a TypeScript setup (outside a Platformatic application), you have to add the following to your types:
import { Entities, Entity } from '@platformatic/sql-mapper'
type Movie {
id: number,
title: string
}
interface AppEntities extends Entities {
movie: Entity<Movie>
}
declare module 'fastify' {
interface FastifyInstance {
platformatic: SQLMapperPluginInterface<AppEntities>
}
}