全栈项目|小书架|服务器开发-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实现首页图书列表接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...
随机推荐
- TypeScript规则整理
介绍我在初学 TS 开发项目中遇到的一些问题,希望对你有所帮助~ 因为我们的JavaScript是弱类型语言,如果项目过大,或者团队人数很多,不仅代码风格不统一,以后还会很难维护 Ty ...
- GIT生成SSH-KEY公钥放到服务器免密登录
在使用git时老是碰到在push的时候提示没有权限的问题,那么现在咱们就来创建ssh-key来免密登录.我们来看看如何配置服务器端的 SSH 访问. 本例中,我们将使用 authorized_keys ...
- Linux:读取文件,每行拆分,并比较拆分数组长度
读取文件,每行拆分,并比较拆分数组长度 #!/bin/bash FILENAME=./.txt function While_read_LINE(){ cat $FILENAME | while re ...
- python去除BOM头\ufeff等特殊字符
1.\ufeff 字节顺序标记 去掉\ufeff,只需改一下编码就行,把UTF-8编码改成UTF-8-sigwith open(file_path, mode='r', encoding='UTF-8 ...
- http各类型请求方法工具总结
本文为博主原创,未经允许不得转载: 在项目中会用到各种类型的http请求,包含put,get,post,delete,formData等各种请求方式,在这里总结一下 用过比较好的请求工具,使用serv ...
- typescript - 6.泛型
泛型类 class MinClas<T>{ public list:T[]=[]; add(value:T):void{ this.list.push(value); } min():T{ ...
- EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务运行出现“请求服务不存在或已停止”
背景分析 了解我们产品线的小伙伴都知道,EasyNVR产品主要用于互联网安防直播,通过EasyNVR拉取摄像机的RTSP视频流,客户端通过访问EasyNVR服务端就可以实现音视频流分发.在此情况下会出 ...
- [LeetCode] 52. N-Queens II N皇后问题 II
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- [LeetCode] 387. First Unique Character in a String 字符串的第一个唯一字符
Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...
- Java之java简介
Java最早有SUN公司(已被Oracle收购)的詹姆斯高斯林在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,目标是针对小型家电设备的嵌入式应用,结果市场没啥反响.谁料到互联网的崛起,让O ...
