Validator4Oak
Validator & Sanitizer middleware for Oak.
Validator & Sanitizer middleware for Oak.
This module provides a middleware for Oak to validate request using JSON Schema.
Compatibility: Oak v14.0.0+
- Validate request query, body, header parameters
- Sanitize request query and body parameters
- Define custom error handler
- Create custom validators and sanitizers
- Stack up multiple validators and sanitizers
Import module with:
import * as mod from "@trackerforce/validator4oak@[VERSION]";
import * as mod from "https://deno.land/x/validator4oak@v[VERSION]/mod.ts";
const router = new Router();
const { query } = ValidatorMiddleware.createMiddleware<Context, Next>();
const { isUrl } = ValidatorFn.createValidator();
router.get('/api/v1/shorten',
query([
{ key: 'url', validators: [isUrl()] },
]), (ctx: Context) => {
// ...
},
);
Optional query parameters:
router.get('/api/v1/shorten',
query([
{ key: 'url', optional: true },
]), (ctx: Context) => {
// ...
},
);
Key body parameters can be accessed using complex keys, e.g. order.number
.
Since Oak v14, body request can only be consumed once, so you'll need to use state.request_body to access it within the route.
router.post('/checkout/v1/confirm',
body([
{ key: 'order.number', validators: [isNumeric()] },
]), (ctx: Context) => {
// ...
},
);
const { header } = ValidatorMiddleware.createMiddleware<Context, Next>();
const { isNumber } = ValidatorFn.createValidator();
router.post('/example/v1/shorten',
header([
{ key: 'x-api-key', validators: [isNumber()] },
]), (ctx: Context) => {
// ...
},
);
const { escape } = ValidatorSn.createSanitizer();
router.post('/message/v1/send',
body([
{ key: 'message', validators: [hasLenght({ max: 500 })], sanitizers: [escape()] },
]), (ctx: Context) => {
// ...
},
);
Use deno task test
to run tests.
Replace the Oak version in the test/deps.ts
file to verify if middleware is compatible.
export { Router, Context, Application } from "jsr:@oak/oak@[OAK_VERSION]";
Please do open an issue if you have some cool ideas to contribute.