全栈项目|小书架|服务器开发-Koa2 参数校验处理
为什么需要做参数校验
在开发中,无论是App开发还是服务器接口开发, 我们无法去预测用户传入的数据,因此参数(数据)校验是开发中不可或缺的一环。
例如像App的注册登录表单提交页面,就要做好多层的判断。如:用户名是否为空,用户密码是否为空,密码长度是否足够等等。
那么有没有比较优雅的方式实现呢?
如何优雅实现
这里使用的是基于validator.js封装的Lin-Validator,源码是七月老师提供。
Lin-Validator拥有的功能:
- 参数校验,
header,query,path,body中的所有参数校验
参数校验
验证器声明:
const { LinValidator, Rule } = require('lin-mizar');
/**
* 正整数 参数校验
*/
class PositiveIntegerValidator extends LinValidator {
constructor() {
// 使用 this 一定要使用 super
super()
// 数组,且关系,也就是数组中所有都满足才能通过
this.id = [
new Rule('isInt', '需要是正整数', {
min: 1
}),
]
}
}
/**
* 更新用户信息
*/
class UpdateInfoValidator extends LinValidator {
constructor () {
super();
this.email = [
new Rule('isOptional'),
new Rule('isEmail', '电子邮箱不符合规范,请输入正确的邮箱')
];
this.nickname = [
new Rule('isOptional'),
new Rule('isLength', '昵称长度必须在2~10之间', 2, 10)
]
}
}
module.exports = {
PositiveIntegerValidator,
UpdateInfoValidator
};
自定义别名使用
// 获取书籍的喜欢状态
router.get('/like', new Auth().m, async ctx => {
// 接口中传递的参数是`bkid`,为了复用 PositiveIntegerValidator 对 id 的校验
// 这里使用了自定义别名 id: 'bkid' 来完成验证器的调用
const v =await new PositiveIntegerValidator().validate(ctx, {
id: 'bkid'
})
const like = await Like.userLikeIt(
ctx.auth.uid, v.get('query.bkid'))
ctx.body = like
})
详细使用
可通过npm安装使用lin-mizar
在package.json中添加lin-mizar的初始化即可:
"dependencies": {
"lin-mizar": "^0.2.1"
}
在要使用校验器的文件引入
const { Rule, LinValidator, isNotEmpty } = require('lin-mizar');
【详细使用参考:TaleLin/lin-cms-koa中的/app/validators/】,方便的话顺手点个star支持一波。
咨询请加微信:轻撩即可。
全栈项目|小书架|服务器开发-Koa2 参数校验处理的更多相关文章
- 全栈项目|小书架|服务器开发-Koa2 全局异常处理
什么是异常 做开发的基本都知道异常,像Android开发中常见的ANR异常.空指针异常,服务器开发中经常遇到的异常404,500异常,还有一些其他常见的异常,具体可见HTTP状态码. 基本上这些异常可 ...
- 全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下
KOA2 是什么? Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 asyn ...
- 全栈项目|小书架|服务器开发-Koa2 连接MySQL数据库(Navicat+XAMPP)
为什么使用数据库 为什么需要数据库?-知乎 相比与文件系统,数据库具有以下优势: 高效率:查找效率高 高可用:可数据库共享 安全性强:数据不能随意修改 选择哪个数据库 数据库可以分为关系型数据库和非关 ...
- 全栈项目|小书架|服务器开发-NodeJS 使用 JWT 实现登录认证
通过这篇 全栈项目|小书架|服务器开发-JWT 详解 文章我们对JWT有了深入的了解,那么接下来介绍JWT如何在项目中使用. 安装 $ npm install jsonwebtoken 生成 Toke ...
- 全栈项目|小书架|服务器开发-NodeJS 项目分包
唠嗑 参考的是慕课网七月老师的课程,七月的课质量真的挺高的,推荐一波.这次的小书架项目源码不会全部公开,因为用了七月老师课程的绝大部分代码.虽然代码不全,但是只要思路看得懂,代码实现就很简单了. 小书 ...
- 全栈项目|小书架|服务器开发-JWT 详解
JWT 官方简介:Introduction to JSON Web Tokens 文章基本是官网内容的翻译,英文不错的同学可点击上面的链接直接看英文文档. 什么是 JWT JWT全称是JSON Web ...
- 全栈项目|小书架|服务器开发-NodeJS 中使用 Sequelize 操作 MySQL数据库
安装 官网:https://sequelize.org/v5/manual/getting-started.html 安装sequelize及数据库连接驱动 npm install --save se ...
- 全栈项目|小书架|服务器开发-Koa全局路由实现
什么是路由 路由就是具体的访问路径,指向特定的功能模块.一个api接口是由ip(域名)+端口号+路径组成,例如 :https://www.npmjs.com/package/koa-router就是一 ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...
随机推荐
- 52、Spark Streaming之输入DStream之基础数据源以及基于HDFS的实时wordcount程序
一.概述 1.Socket:之前的wordcount例子,已经演示过了,StreamingContext.socketTextStream() 2.HDFS文件 基于HDFS文件的实时计算,其实就是, ...
- C博客作业03——函数
0.展示PTA总分 截图展示: 1.本章学习总结 1.1学习内容总结 (a)函数的定义 1)函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种,scanf(),printf()等为库函数 ...
- 逆向对抗技术之ring3解除文件句柄,删除文件
目录 一丶简介 二丶实战 + 环境模拟 1.环境模拟. 2.删除原理 3.代码实现 一丶简介 这些问题主要是工作中会遇到.包括后面的逆向对抗技术.有的可能只会提供思路.并且做相应的解决与对抗. 二丶实 ...
- SDN初体验(软件定义网络实验一)
作业说明 本次实验步骤2.3是在机房环境下完成的,步骤1.4是在自己笔记本上重新配置完成的,所以环境.用户名什么的会略有差别. 1. 安装轻量级网络仿真工具Mininet 为了节约课程时间,实验室机房 ...
- 编译失败,无法安装APK
编译失败,无法安装APK. 把libs目录中,全部内容清空,再重新编译就可以了. 应该是有些组件有冲突的原因! -------------------------------------------- ...
- RocketMQ集群安装 2主2从 console
安装zip和mavenyum install -y unzip zip wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel ...
- Oracle系列十 创建和管理表
常见的数据库对象 Oracle 数据库中的表 用户定义的表: 用户自己创建并维护的一组表 包含了用户所需的信息 如:SELECT * FROM user_tables;查看用户创建的表 数据字典: 由 ...
- C# redis客户端帮助类
需要在NuGet里面引用ServiceStack.Redis using ServiceStack.Redis; using ServiceStack.Redis.Generic; using Sys ...
- ISO/IEC 9899:2011 条款6.10——预处理指示符
6.10 预处理指示符 语法 1.preprocessing-file: groupopt group: group-part group group-part group-part: if-s ...
- 学习使用Lombok生成代码
一.介绍 Lombok官网:https://projectlombok.org/ Lombok的功能简单一点说,就是可以帮我们生成一些代码,这些代码并不是在源码(source code)体现出来的,而 ...
