@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
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.
yarn add @marblejs-contrib/middleware-joi
Requires
@marblejs/core
to be installed.import { validator$ } from '@marblejs-contrib/middleware-joi';
validator$ :: (Schema, Joi.ValidationOptions) -> HttpMiddlewareEffect
parameter | definition |
schema | Schema |
options |
parameter | definition |
headers | <optional> any |
params | <optional> any |
query | <optional> any |
body | <optional> any |
1. Example of using middleware on a GET route to validate query parameters:
foo.effect.ts
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:
app.ts
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 });
Last modified 2yr ago