@appjumpstart/mercury-schema

An Express/Connect-compatible middleware for validation and serialization using ajv and fast-json-stringify

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
10Jul 19, 2018May 3, 2018Minified + gzip package size for @appjumpstart/mercury-schema in KB

Readme

mercury-schema

An Express/Connect-compatible middleware for validation and serialization using ajv and fast-json-stringify

npm page Join the community on Spectrum

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' })
        // Or if, for example, using express without using mercury-send:
        // const body = res.stringify({ message: 'Your message has been sent' })
        // res.type('json').end(body)
      } 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.

 

AppJumpstart

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.