koa2-validation

koa2-validation is a koa2 middleware to validate the request with Joi. Support body , params , query for Now.
Inspired by express-validation.

As new version Joi has some breaking changes, some old schema is not workable. To avoid the big change for using legacy koa2-validation version, you need to update your code as follows, if you want to use new version Joi.

// default const validate = require('koa2-validation'); // with specific Joi const joi = require("@hapi/joi"); const Validation = require("koa2-validation").Validation; const validator = new Validation(joi); const validate = validator.validate.bind(validator); 

Please use the same Joi version when define your joi schema.

Install with npm:

npm i -S koa2-validation

Then, you can use koa2-valition to configure the validation schemas in routes. The example below is to define three validations about user.
file: test/lib/server.js

const http = require('http');
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const router = require('koa-router')();
const validate = require('koa2-validation'); // 1. import the koa2-validation
const user = require('./user');
router.post('/users', validate(user.v.addUser), user.addUser); // 3. setup the validate middleware
router.get('/users/:id', validate(user.v.getUserInfo), user.getUserInfo);
router.get('/users', validate(user.v.getUserList), user.getUserList);
const app = new Koa();
// error handler
app.use(async (ctx, next) =>
try
await next();
> catch (err)
ctx.status = err.status || err.code;
ctx.body =
success: false,
message: err.message,
>;
>
>);
app.use(bodyParser()); // bodyParser should be before the routers
app.use(router.routes());
const server = http.createServer(app.callback());
module.exports = server;

You still need to define the validation schema in your controllers, as follows:
file: test/lib/user.js

const _ = require('lodash');
const Joi = require('joi');
const v = >;
exports.v = v;
const users = [
id: '001',
name: 'dennis1',
age: 18,
>,
id: '002',
name: 'dennis2',
age: 20,
>];
// 2. define the validation schema
v.addUser =
body:
id: Joi.string().required(),
name: Joi.string(),
age: Joi.number(),
>,
>;
exports.addUser = async (ctx) =>
const user = ctx.request.body;
users.push(user);
ctx.body = success: true, data: users >;
>;

The validation schema is followed by Joi. You can define more effective schemas based on joi docs.

When bad request, koa2-validation has catched the error, and throw a standard Error instance, which has an attr status 400.

app.use(async (ctx, next) =>
try
await next();
> catch (err)
ctx.status = err.status || err.code;
ctx.body =
success: false,
message: err.message,
>;
>
>);

In the test foler, I made a demo about user management. You can get how to use koa2-validation from it. If you have some questions, you can post an issue.