mercury-schema
An Express/Connect-compatible middleware for validation and serialization
using ajv and fast-json-stringify
About
mercury-schema
is middleware you stick in front of your route handler to
provide 🔥 fast schema validation of the request body and/or automatic
serialization of the handler's response data.
Installation
npm install @appjumpstart/mercury-schema --save
Usage
NOTE: The example below assumes you're also using the
mercury-send middleware to
stringify the response automatically when calling res.send
.
Add mercury-schema
as a route-level middleware before your route handler and
pass it a schema:
const { mercurySchema } = require('@appjumpstart/mercury-schema')
app.post('/contact', [
mercurySchema({
request: {
type: 'object',
properties: {
name: { type: 'string' },
email: { type: 'string', minLength: 5 },
message: { type: 'string' }
},
required: ['email', 'message']
},
response: {
type: 'object',
properties: {
message: { type: 'string' }
}
}
}),
function contactHandler (req, res, next) {
try {
if (req.valid) {
sendContactEmail(req.body)
res.send({ message: 'Your message has been sent' })
} else {
res.status(400).send(req.validation)
}
} catch (err) {
next(err)
}
}
])
Acknowledgement
mercury-schema
is completely modeled around the excellent validation and
serialization feature within the Fastify framework.