@gendronb/fastify-named-routes v0.6.0
fastify-named-routes
This package brings support for named routes to Fastify.
Being able to retrieve route options (path in particular) by name can be useful for generating URLs (for emails for example) or redirects (eg. Location header).
Install
npm i @gendronb/fastify-named-routes --saveUsage
First, register the plugin :
const fastify = require('fastify')()
const named-routes = require('fastify-named-routes')
fastify.register(named-routes)
fastify.listen(3000, err => {
if (err) throw err
console.log('Server listenting on localhost:', fastify.server.address().port)
})Then register your routes as usual, simply passing a routeName property under the config key :
fastify.get('/get', { config: { routeName: 'my-route' } }, function (req, reply) {
reply.send('get')
})Then later in your code :
fastify.post('/create', function (req, reply) {
let newEntity= // Some business logic to create an entity
// Retrieve route options by name
let myRouteOptions = fastify.namedRoutes.get('my-route')
console.debug(myRouteOptions)
// Will output :
// {
// config: { routeName: 'my-route', url: '/get' },
// method: 'GET',
// url: '/get',
// handler: [Function],
// path: '/get',
// prefix: '',
// logLevel: '',
// attachValidation: false
// }
reply.status(303).header('Location', `${myRouteOptions.path}/${newEntity.id}`).send('created')
// If newEntity.id is 1, the location header will be : 'Location: /get/1'
})How it works
This plugin simply registers a global (app-wide) onRoute hook.
The hook will add any route having a routeName key (under the route options' config key) to a global routes map. Only routes with that specific key will be added to the routes map.
Encapsulation and duplicate route name
Since the goal is to have a global (app-wide) routes map, this plugin does not support Fastify's encapsulation feature.
Also, if you try to register a route with an existing routeName, the plugin will display a warning and the route will NOT be added to the map (in effect preserving the previous named route).
License
MIT