Skip to content
This repository has been archived by the owner on Jul 17, 2019. It is now read-only.
/ mercury-schema Public archive

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

Notifications You must be signed in to change notification settings

ianwalter/mercury-schema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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

Resources

Stars

Watchers

Forks

Packages