@marblejs-contrib/middleware-joi
A Joi validation middleware for Marble.js.

Joi is an object schema description language and validator for JavaScript objects. Using its schema language, you can validate things like:
- HTTP request headers 
- HTTP body parameters 
- HTTP request query parameters 
- URL parameters 
You can find detailed API reference for Joi schemas here.
Deprecation warning
Since version 4.0 @marblejs-contrib/middleware-joi package is deprecated and won't be maintained anymore.
Since version 4.0, the middleware is a part of contrib packages. If you really want to use this middleware you can reach it via @marblejs-contrib/middleware-joi.
For more advanced request or event validation purposes we highly recommend to use @marblejs/middleware-io package instead. It can better handle type inference for complex schemas.
Installation
yarn add @marblejs-contrib/middleware-joiRequires @marblejs/core to be installed.
Importing
import { validator$ } from '@marblejs-contrib/middleware-joi';Type declaration
validator$ :: (Schema, Joi.ValidationOptions) -> HttpMiddlewareEffectParameters
Schema
parameter
definition
headers
<optional> any
params
<optional> any
query
<optional> any
body
<optional> any
Usage
1. Example of using middleware on a GET route to validate query parameters:
import { r } from '@marblejs/http';
import { validator$, Joi } from '@marblejs-contrib/middleware-joi';
const foo$ = r.pipe(
  r.matchPath('/'),
  r.matchType('GET'),
  r.useEffect(req$ => req$.pipe(
    use(validator$({
      query: Joi.object({
        id: Joi.number().min(1).max(10),
      })
    }));
    // ...
  )));Example above will validate each incoming request connected with foo$ Effect. The validation blueprint defines that the id query parameter should be a number between <1..10>. If the schema requirements are not satisfied the middleware will throw an error with description what went wrong.
{
  error: {
    status: 400,
    message: '"id" is required'
  }
}2. Example of validating all incoming requests:
import { validator$, Joi } from '@marblejs-contrib/middleware-joi';
const middlewares = [
  // ...
  validator$(
    {
      headers: Joi.object({
        token: Joi.string().token().required(),
        accept: Joi.string().default('application/json')
      })
    },
    { stripUnknown: true },
  )
];
const effects = [
  endpoint1$,
  endpoint2$,
  ...
];
const app = httpListener({ middlewares, effects });Credits
Middleware author: Lucio Rubens
Last updated
