Fastify and protobufjs, together at last. Uses protobufjs by default.
Provides transparent middleware that can be used to support clients requesting Accept: application/x-protobuf from endpoints using res.json or sending Content-Type: application/x-protobufjs to any endpoint. You can continue to use req.body and res.json and fastifyProtobuf will handle the conversion in the background using protobufjs.
$ npm install --save fastify-protobufjs
// or
$ yarn add fastify-protobufjs
$ npm test
const fastifyProtobuf = require("fastify-protobufjs");
// ...
// custom plugin
fastify.register(fastifyProtobuf), {
protoloadPath: path.join(__dirname, 'schema', 'package.proto'),
messagePackage: 'Package'
})
'use strict'
const path = require('path')
const fastify = require('fastify')({
logger: true
})
fastify.register(require('fastify-protobufjs'), {
protoloadPath: path.join(__dirname, 'schema', 'package.proto'),
messagePackage: 'Package'
})
fastify.post('/decode', (req, reply) => {
// http POST http://localhost:5000/decode Accept:application/x-protobuf Content-Type:application/x-protobuf @grpc\package-protobuf.dat
const body = req.body
return body
})
fastify.get('/encode', (req, reply) => {
// http http://localhost:5000/encode Accept:application/x-protobuf
reply.send({
name: "binari-encodings",
private: true,
version: "1.0.0",
main: "index.js",
licence: "MIT",
value: 42
})
})
const start = async () => {
try {
await fastify.listen(5000)
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()