# valid-body

> Express middleware generator for validating requests

Latest version **1.0.0** (published 2019-03-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install valid-body
pnpm add valid-body
yarn add valid-body
bun add valid-body
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2019-03-02 |
| First published | 2019-01-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 62.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Carl Winkler |
| Maintainers | seikho |
| Keywords | express, middleware, validate |

## Links

- npm: https://www.npmjs.com/package/valid-body
- Repository: https://github.com/seikho/valid-body
- Homepage: https://github.com/seikho/valid-body#readme
- Issues: https://github.com/seikho/valid-body/issues
- npm.io page: https://npm.io/package/valid-body

## Alternatives

- [@sindresorhus/slugify](https://npm.io/package/@sindresorhus/slugify.md) — 3.7M weekly downloads
- [solid-js](https://npm.io/package/solid-js.md) — 2.7M weekly downloads
- [expo-glass-effect](https://npm.io/package/expo-glass-effect.md) — 2.5M weekly downloads
- [nanoassert](https://npm.io/package/nanoassert.md) — 780.8K weekly downloads
- [@ffmpeg/ffmpeg](https://npm.io/package/@ffmpeg/ffmpeg.md) — 529.5K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2019-03-02
- 0.5.1 — 2019-02-15
- 0.5.0 — 2019-02-05
- 0.4.0 — 2019-02-05
- 0.3.0 — 2019-01-22
- 0.2.2 — 2019-01-21
- 0.2.1 — 2019-01-20
- 0.2.0 — 2019-01-19
- 0.1.2 — 2019-01-19
- 0.1.1 — 2019-01-19
- 0.1.0 — 2019-01-18

## README

# valid-body

> Express middleware generator for validating requests

Written in TypeScript

## Installation

```sh
> yarn add valid-body
# or:
> npm i valid-body
```

## Usage

Each property

`valid-body` is validate your `request.body` or `request.query` objects.
If they fail validation, they will call `next` with an error so your error middleware can catch it.

```ts
// create-user.ts
import { RequestHandler } from 'express'
import * as valid from 'valid-body'

interface Body {
  name: string
  age: number
  status: 'enabled' | 'disabled'
  description?: string
  meta: {
    favouriteAnimal?: string
  }
}

const validator = valid.create({
  name: valid.isString,
  age: valid.isNumber,
  status: valid.wrap(valid.isString, { allowed: ['enabled', 'disabled'] }),
  description: valid.wrap(valid.isString, { optional: true }),
  meta: {
    favouriteAnimal: valid.wrap(valid.isString, { optional: true })
  }
})

const handler: RequestHandler = async (req, res, next) => {
  const body: Body = req.body
  ...
  res.json('ok!')
}

// user.ts
import { Router } from 'express'
import * as create from './create'

export { router as default }

const router = Router()
router.post('/create', create.validator, create.handler)
```

## API

### create

_CreateOptions_

`query?: boolean` The middleware will use `request.body` by default. Setting `query` to `true` will use `req.query` instead.

`strict?: boolean`: If true, properties not defined in the validator will be removed from the validated object.

```ts
type ValueValidator<TValue = unknown> = (value: TValue) => undefined

type Validator = { [key: string]: ValueValidator | Validator }

interface CreateOptions {
  query?: boolean
  strict?: boolean
}

function create(validator: Validator, opts?: CreateOptions): RequestHandler
```

### first

Attempts to validate the request body against an array of validators. Returns the first success or calls `next()` with an error.

```ts
function first(validators: Validator[], opts?: CreateOptions)): RequestHandler
```

### isString

```ts
interface StringOptions {
  minLength?: number
  maxLength?: number
  optional?: boolean

  // Evaluates the validations against the .trim()-ed string
  trim?: boolean

  // Whitelist of allowed values
  allowed?: string[]
}

function(value: any, options?: StringOptions): string | undefined
```

### isNumber

```ts
interface NumberOptions {
  min?: number
  max?: number
  optional?: boolean
}

function(value: any, options?: NumberOptions): number | undefined
```

### isBoolean

```ts
interface BooleanOptions {
  optional?: boolean

  /** If the value is a string of 'true' or 'false', cast it to a boolean */
  parse?: boolean
}

function(value: any, options?: BooleanOptions): boolean | undefined
```

### isTimestamp

```ts
interface TimestampOptions {
  optional?: boolean
}

function(value: any, options?: TimestampOptions): number | undefined
```

### isArray

```ts
interface ArrayOptions<T = any> {
  optional?: boolean

  /** Ensure that every element in the array is a specific type */
  validator?: Validator | ValueValidator<T>
}

function isArray(value: any, opts: ArrayOptions = {}): Array | undefined
```

### isEmail

```ts
interface EmailOptions {
  optional?: boolean
}

function isEmail(value: any, opts: EmailOptions = {}): string | undefined
```

---
_Source: https://npm.io/package/valid-body · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
