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-validationconst user = require('./user');router.post('/users', validate(user.v.addUser), user.addUser); // 3. setup the validate middlewarerouter.get('/users/:id', validate(user.v.getUserInfo), user.getUserInfo);router.get('/users', validate(user.v.getUserList), user.getUserList);const app = new Koa();// error handlerapp.use(async (ctx, next) =>tryawait next();> catch (err)ctx.status = err.status || err.code;ctx.body =success: false,message: err.message,>;>>);app.use(bodyParser()); // bodyParser should be before the routersapp.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 schemav.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) =>tryawait 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.