1.验证注册参数

根目录/validation/register.js

const Validator = require('validator');
const isEmpty = require('./is-empty'); module.exports = function validateRegisterInput(data) {
let errors = {}; data.name = !isEmpty(data.name) ? data.name : '';
data.email = !isEmpty(data.email) ? data.email : '';
data.password = !isEmpty(data.password) ? data.password : '';
data.password2 = !isEmpty(data.password2) ? data.password2 : ''; if (!Validator.isLength(data.name, { min: 2, max: 30 })) {
errors.name = '名字的长度不能小于2位且不能超过30位';
} if (Validator.isEmpty(data.name)) {
errors.name = '名字不能为空';
} if (!Validator.isEmail(data.email)) {
errors.email = '邮箱不合法';
} if (Validator.isEmpty(data.email)) {
errors.email = '邮箱不能为空';
} if (Validator.isEmpty(data.password)) {
errors.password = 'password不能为空';
} if (!Validator.isLength(data.password, { min: 6, max: 30 })) {
errors.password = 'password的长度不能小于6位且不能超过30位';
} if (Validator.isEmpty(data.password2)) {
errors.password2 = 'password2不能为空';
} if (!Validator.equals(data.password, data.password2)) {
errors.password2 = '两次密码不一致';
} return {
errors,
isValid: isEmpty(errors)
}
}

2.验证登录参数

根目录/validation/login.js

const Validator = require('validator');
const isEmpty = require('./is-empty'); module.exports = function validateLoginInput(data) {
let errors = {}; data.email = !isEmpty(data.email) ? data.email : '';
data.password = !isEmpty(data.password) ? data.password : ''; if (!Validator.isEmail(data.email)) {
errors.email = '邮箱不合法';
} if (Validator.isEmpty(data.email)) {
errors.email = '邮箱不能为空';
} if (Validator.isEmpty(data.password)) {
errors.password = 'password不能为空';
} if (!Validator.isLength(data.password, { min: 6, max: 30 })) {
errors.password = 'password的长度不能小于6位且不能超过30位';
} return {
errors,
isValid: isEmpty(errors)
}
}

3.引用

根目录/routes/api/users.js

// 引入 input 验证密码
const validateRegisterInput = require('../../validation/register');
const validateLoginInput = require('../../validation/login');
... // 注册接口
const { errors, isValid } = validateRegisterInput(ctx.request.body); // 判断是否验证通过
if (!isValid) {
ctx.status = 400;
ctx.body = errors;
return;
} // 登录接口
const { errors, isValid } = validateLoginInput(ctx.request.body); // 判断是否验证通过
if (!isValid) {
ctx.status = 400;
ctx.body = errors;
return;
}

.

koa 项目实战(十一)验证登录和注册的 input的更多相关文章

  1. Django实战(一)-----用户登录与注册系统6(session会话、注册视图)

    因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的. 通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于 ...

  2. Django实战(一)-----用户登录与注册系统3(前端页面、登录视图)

    基本框架搭建好了后,我们就要开始丰富页面内容了.最起码,得有一个用户登录的表单不是么?(注册的事情我们先放一边.) 一. 原生HTML页面 删除原来的login.html文件中的内容,写入下面的代码: ...

  3. Django实战(一)-----用户登录与注册系统2(数据模型、admin后台、路由视图)

    使用Django开发Web应用的过程中,很多人都是急急忙忙地写视图,写前端页面,把最根本的模型设计给忽略了. 模型中定义了数据如何在数据库内保存,再直白点说就是数据表的定义.这部分工作体现在Djang ...

  4. Django实战(一)-----用户登录与注册系统5(图片验证码)

    为了防止机器人频繁登录网站或者破坏分子恶意登录,很多用户登录和注册系统都提供了图形验证码功能. 验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序. 可以防止恶意破解密码.刷票.论坛 ...

  5. koa 项目实战(九)passport验证token

    1.安装模块 npm install koa-passport -D npm install passport-jwt -D 2.解析token 根目录/config/passport.js cons ...

  6. koa 项目实战(七)登录接口

    1.登录接口 /** * @route POST api/users/login * @desc 登录接口地址 * @access 接口是公开的 */ router.post('/login', as ...

  7. koa 项目实战(十)使用 validator 验证表单

    1.安装模块 npm install validator -D 2.验证注册参数 根目录/validation/register.js const Validator = require('valid ...

  8. koa 项目实战(四)注册接口和调试工具(postman)

    1.安装模块 npm install koa-bodyparser --save npm install bcryptjs --save 2.引入模块 根目录/app.js const bodyPar ...

  9. koa 项目实战(六)注册接口加密

    1.创建工具类 根目录/config/tools.js const bcrypt = require('bcryptjs'); const tools = { enbcrypt(password) { ...

随机推荐

  1. fragment概念理解

    fragment概念理解知识,fragment概念理解图片 fragment概念理解内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb ...

  2. MySQL时间类型及获取、展示处理

    MySQL时间格式 mysql所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值 ...

  3. 第一章、VUE-挂载点-实例成员-数据-过滤器-文本指令-事件指令-属性指令-表单指令-01

    目录 路飞项目 vue vue 导读 vue 的优势 渐进式框架 引入 vue 实例成员 - 挂载点 el js 对象(字典)补充 实例成员 - 数据 data 实例成员 - 过滤器 filters ...

  4. 智能指针原理及实现(2)unique_ptr

    只允许基础指针的一个所有者. 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr). 替换已弃用的 auto_ptr. 相较于 boost::s ...

  5. 【Day3】5.Python中的lxml模块

    import lxml.etree as le with open('edu.html','r',encoding='utf-8') as f: html = f.read() html_x = le ...

  6. 多线程threading模块

    python的多线程编程 简介 多线程编程技术可以实现代码并行性,优化处理能力,同时功能的更小划分可以使代码的可重用性更好.Python中threading和Queue模块可以用来实现多线程编程. 详 ...

  7. PHPStorm 3.3 破解方法 以及汉化

    第一步修改host文件(host文件地址为): C:\Windows\System32\drivers\etc 将以下内容添加到host文件里面     0.0.0.0 account.jetbrai ...

  8. bash: hexo: command not found

    问题 很久没写博客了,今天用hexo新建文章时git报错: bash: hexo: command not found 解决办法 百度之后,将D:\WorkingSoftware\GithubBlog ...

  9. cubemx+stm32串口学习汇总资料

    这篇文章是串口中断的文章--STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助. http://www.stmcu.org.cn/module/forum/thread-616613- ...

  10. 《Redis 设计与实现》读书笔记(二)

    单机数据库实现 九.数据库 1.服务器中的数据库 一个redis服务器保存多个数据库. struct redisServer { //一个数组,多个数据库 redisDb *db; } 当执行sele ...