Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mze-runner/amn-express-validate

DO NOT TRUST CLIENT! An express middleware build around 'hapi/joi' validation package to simplify client's input validation.
https://github.com/mze-runner/amn-express-validate

Last synced: about 2 months ago
JSON representation

DO NOT TRUST CLIENT! An express middleware build around 'hapi/joi' validation package to simplify client's input validation.

Awesome Lists containing this project

README

        

# AMN Express Validate

DO NOT TRUST A CLIENT!

`Amn Express Validate` provides a simple and flexible way of validation client's input.

It is a simple wrapper around [`joi`](https://joi.dev/) validator and convert it into **connect middleware**. It helps easily build validation step into [express](https://expressjs.com/) middleware chain.

In order to deliver meaningful error message back to client, Amn Express Validate leverage another `amn` package [Amn Error](https://www.npmjs.com/package/amn-error).

> AMN leverage schema validation for client's input through [joi](https://joi.dev/), hence, it's your responsibility to install the package before use `validate`. Please, follow peer dependency message at installation.

## Get started

### Installation

```javascript
npm i amn-express-validate
```

### Examples

The middleware `validate` is HOC. That allows to add extra control over the way the middleware work. It consumes two parameters,

- schema - an ObjectSchema which defines validation rules.
- source - an optional parameter 'body' or 'query' or 'params' to define which client input to validate. In case none provided, the middleware picks all input from 'body' and 'query' and 'params'.

```javascript
const Joi = require('joi');
const validate = require('amn-express-validate');

// validate req.body
const userSignUp = Joi.object().keys({
email: Joi.string().email().required(),
password: Joi.string().min(4).max(20).required(),
});

router.post('/user/signup',
, validate(userSignUp, 'body')
, singUpMiddleware
);

// validate req.params in url string
const postId = Joi.object().keys({
pid: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).required()
});

const postBody = Joi.object().keys({
title: Joi.string().required(),
text: Joi.string().optional()
});

router.put('/post/:pid/',
, validate(postId, 'params')
, postUpdateMiddleware
);

// you can call validate multiply times
router.put('/post/:pid/',
, validate(postId, 'params') // validate params
, validate(postBody, 'body') // validate body
, postUpdateMiddleware
);

```

### Error

Amn Express Validate leverage another `amn` package [Amn Error](https://www.npmjs.com/package/amn-error) to report an error back to client.

Errors have the following response

- http status `400`;
- code `BAD_REQUEST`;
- message is a error description generated by [`joi`](https://joi.dev/).