Serializer according to the Accept
header. Supports Fastify versions >=2.0.0
Please refer to this branch and related versions for Fastify ^1.10.0 compatibility.
npm i --save fastify-accepts-serializer
const protobuf = require('protobufjs')
const YAML = require('yamljs')
const msgpack = require('msgpack5')()
const root = protobuf.loadSync('test/awesome.proto')
const AwesomeMessage = root.lookupType('awesomepackage.AwesomeMessage')
let fastify = require('fastify')()
// Global serializers
fastify.register(require('fastify-accepts-serializer'), {
serializers: [
{
regex: /^application\/yaml$/,
serializer: body => YAML.stringify(body)
},
{
regex: /^application\/x-msgpack$/,
serializer: body => msgpack.encode(body)
}
],
default: 'application/yaml' // mime type used if Accept header don't match anything
})
// Per-router serializers
const config = {
serializer: {
serializers: [
{
regex: /^application\/x-protobuf$/,
serializer: body => AwesomeMessage.encode(AwesomeMessage.create(body)).finish()
}
]
}
}
fastify.get('/request', { config }, function (req, reply) {
reply.send({pippo: 'pluto'})
})
For each route, it's defined a SerilizerManager that has a merge of per-route and global serializers definition.
The mime type application/json
is always handled by fastify
if no serializer is register for that mime type.
If no default
key is specified in configuration, all requests with unknown Accept
header will be replied with an 406 response (a boom error is used)