https://github.com/go-playground/validator https://github.com/go-playground/locales https://github.com/go-playground/universal-translator
https://www.kancloud.cn/aibabel/koafornodejs/1812621 中间件工作原理 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存储中间件,use调用顺序会决定中间件的执行顺序。 每个中间件都是一个函数(不是函数将报错),接收两个参数,第一个是ctx上下文对象,另一个是next函数(由koa-compose定义) 在建立好http服务器后,会调用koa-compose模块对middleware中间件数组进行处理。具体代码这里就不贴了,原理就是:会从middleware数组中取第一个函数开始执行,中间件函数中调用next方法就会去取下一个中间件函数继续执行。每个中间件函数执行完毕后都会返回一个promise对象。(ps:调用next方法并不是表示当前中间件函数执行完毕了,调用next之后仍可以继续执行其他代码) /**
// 实例化 let app = new Koa();
// Koa中间件 // 匹配任何路由,如果不写next,这个路由被匹配到了就不会继续向下匹配
// www.域名.com/news app.use(async (ctx, next) => { console.log(‘1、这是一个中间件01’); await next();
console.log(‘5、匹配路由完成以后又会返回来执行中间件’); })
app.use(async (ctx, next) => { console.log(‘2、这是一个中间件02’); await next();
console.log(‘4、匹配路由完成以后又会返回来执行中间件’); })
router.get(‘/’, async (ctx) => { ctx.body = ‘首页’; })
router.get(‘/news’, async (ctx) => { console.log(‘3、匹配到了news这个路由’); ctx.body = ‘这是一个新闻页面’; })
router.get(‘/login’, async (ctx) => { ctx.body = ‘登录页面’; })
app.use(router.routes()); app.use(router.allowedMethods()); /**
app.listen(3000);
https://github.com/grpc-ecosystem/go-grpc-middleware https://github.com/mwitkow/go-proto-validators