Joi
第三方模块
JavaScript对象的规则描述语言和验证器。
即:验证创建的文档是否符合创建规则
步骤:
-
引入 joi 模块
-
定义对象的验证规则
所有的验证规则都是可选的,如果你传入的是一个空值,验证也会通过
require() - 当前字段必须传值,否则验证不通过
error() - 自定义错误信息 -
实施验证 validate()方法
示例:
// 引入 joi 模块
const Joi = require('joi');
// 定义对象的验证规则
/*
定义的验证规则都是可选的,如果你传入的是一个空值,验证也会通过
require() - 当前字段必须传值,否则验证不通过
error() - 自定义错误信息
*/
const schema = {
username: Joi.string().min(2).max(5).require().error(new Error('username属性没有通过验证')),
birth: Joi.number().min(1900).max(2020).error(new Error("birth没有通过验证"))
};
async function run () {
try {
// 实施验证
await Joi.validate({username: 'ab',birth: 1992},schema);
}catch (ex) {
console.log(ex);
return;
}
console.log("验证通过")
}
用户添加:
user-edit-fn.js
// 引入 Joi 模块
const Joi = require('joi');
// 引入用户集合的构造函数
require('../../model/user')
// 引入加密模块
const bcrypt = require('bcrypt');
module.exports = async (req,res) => {
// 定义对象的验证规则
const schema = {
username: Joi.string().min(2).max(12).required().error(new Error("用户名不符合要求")),
email: Joi.string().email().required.error(new Error("邮箱格式不符合要求")),
password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error("密码格式不符合要求")),
role: Joi.number().valid('normal','admin').required().error(new Error("角色值不符合要求")),
state: Joi.number.valid(0,1).required().error(new Error("状态值非法"))
};
try {
// 实施验证
await Joi.validate(req.body,schema);
} catch (e) {
// 验证没有通过
// e.message
// 重定向回用户添加页面
return res.redirect(`admin/user-edit?message=${e.message}`)
}
// 根据邮箱地址查询用户是否存在
let user = await User.findOne({email: req.body.email});
// 如果用户已经存在 邮箱地址已经被别人占用
if (user) {
// 重定向回用户添加页面
return res.redirect(`admin/user-edit?message= 邮箱地址已经被占用`)
}
// 对密码加密
// 生成随机字符串
const salt = await bcrypt.genSalt(10);
// 加密
const password = await bcrypt.hash(req.body.password,salt);
// 替换密码
req.body.password = password;
// 将用户信息添加到数据库中
await User.create(req.body);
// 将页面重定向到用户列表页面
res.redirect('/admin/user')
}
谷歌浏览器默认是不能用本地安装插件的,可以使用这个连接改变浏览器不能用本地安装插件的默认行为
chrome://flags/#extensions-on-chrome-urls
把这个连接复制到扩展程序的页面中访问
在百度中搜索 JSON Formatter并下载(下载后,如果需要解压就解压),把下载好的拖到这个页面中即可
【设置 — 更多工具 — 扩展程序】