api-request-validator

1.1.4 • Public • Published

api-request-validator

This module is under construction

A library to validate API requests attributes

Install

npm downloads

$ npm install api-request-validator

Test

$ npm run test

Usage

Rules

Rule Description Valid condition
required value is required value !== undefined
enum value must be quel to enum.indexOf(value !== -1)
type type of value typeof(value) === type
regexp regexp must be match value regexp.exec(value)
asyncMethods custom async functions () => true

TO DO: Explain the difference between error and warning

const validationRules = {
  ['PAYLOAD_KEY']: {
    ['VALIDATION_RULE']: { 
      data: ...,
      error: { }
    },
    ['VALIDATION_RULE']: { 
      data: ...,
      warning: { }
    }
  }
}

Simple example: user registration payload validation

See the example here!

Scenarios of example

Constructor

api-request-validator export a class constructor. The best way to build the validator is to extend the Validator class and set RULES as first argument of super() in constructor(). This approach allows to pass methods to the validator, like this:

import Validator from 'api-request-validator'
  
class UserRegistrationValidator extends Validator {
  constructor(payload) {
    super(RULES, payload, {})
  }
  
  async beforeValidate() {
  
  }
  
  async afterValidate() {
  
  }
  
  async findExisting(email) {
    const existing = await User.findOne({ email ))
    return !existing
  }
  
  async isBlacklisted(email) {
    ...
  }
}

Or for simple case

const validator = new Validator(RULES, payload)

Example with express

app.post('/login, async (req, res, next) => {
  const validator = new LoginValidator(req.body)
  await validator.run()
  if (!validator.valid)
    return next(validator.error)
  if (validator.warnings)
    res.header('api-warnings', validator.warnings)
  
  ...
})

To do

  • write correct documentation
  • improve :)

Package Sidebar

Install

npm i api-request-validator

Weekly Downloads

43

Version

1.1.4

License

MIT

Unpacked Size

229 kB

Total Files

13

Last publish

Collaborators

  • pitbi