ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

koa2 使用 Joi

2022-02-06 14:29:59  阅读:222  来源: 互联网

标签:const require 使用 ctx koa2 user router Joi


封装函数:

const { ErrorModel } = require("../model/resModel");
function schema(method, schemas) {
  async function validateSchema(ctx, next) {
    let data = null;
    if (method === "get") {
      data = await ctx.request.query;
    } else {
      data = await ctx.request.body;
    }
    const { error } = schemas.validate(data);
    if (error) {
      ctx.body = new ErrorModel(error.message);
      return;
    }
    await next();
  }

  return validateSchema;
}
module.exports = schema;

规则:

/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项,不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */
const Joi = require("joi");

const user = Joi.object({
  username: Joi.string().alphanum().min(1).max(10).required(),
  password: Joi.string()
    .pattern(/^[\S]{6,12}$/)
    .required()
});

module.exports = {
  user
};

路由:

const Router = require("koa-router");
const { regUser, blogList, login } = require("../controllers/user");
const schema = require("../model/schema");
// 导入 Joi 来定义验证规则
const { user } = require("../schema/user");
// const upload = require("../model/upload");
const router = new Router({ prefix: "/api/user" });
// 查询博客信息
router.get("/bloglist", blogList);
// 注册
router.post("/reguser", schema("post", user), regUser);
// 上传头像
// router.post("/upload", upload.single("avatar"), ctx => {
//   console.log("ctx.request.file", ctx.request.file);
//   console.log("ctx.file", ctx.file.path);
//   console.log("ctx.request.body", ctx.request.body);
//   ctx.body = "done";
// });
// 登录
router.post("/login", login);
module.exports = router;

标签:const,require,使用,ctx,koa2,user,router,Joi
来源: https://blog.csdn.net/qq_57749525/article/details/122797993

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有