koa使用joi来进行参数校验

post on 2024-03-07 17:35:34
后端
koa
joi
0327

起因是koa的很多参数校验的插件都好几年不更新了,然后Joi作为nodejs中非常流行的参数校验的插件,于是只需将Joi稍微进行封装即可优雅的进行参数校验

以下是utils/context.js中封装的校验函数

const Joi = require('joi')

function validate(params = {}, schema = {}) {
  const { error } = Joi.object(schema).validate(params, {
    abortEarly: false, allowUnknown: true
  })
  return error
}
// 绑定 app.context  ctx.function name直接调用
module.exports = {
  validate
}

在app.js中挂载到上下文中
app.js

const app = new Koa()
// 在创建koa后进行挂载
const context = require('./utils/context')
Object.keys(context).forEach(key => {
  app.context[key] = context[key] // 绑定上下文对象
})

以下是一个简单的使用示例

router.get('/json', async (ctx) => {
  const error = ctx.validate(ctx.request.query, {
    page: Joi.number(),
    pageSize: Joi.number(),
    keyword: Joi.string().allow(''),
    category: Joi.string(),
    tag: Joi.string(),
    preview: Joi.number(),
    order: Joi.string()
  })
  if (error) return ctx.body = result(null, error.message, false);
  
  const data = ctx.request.query
  return ctx.body = result(data, '成功');
})
说点什么...
评论支持MarkDown格式

 / 1