Joi模块

Joi

第三方模块

JavaScript对象的规则描述语言和验证器。

即:验证创建的文档是否符合创建规则

步骤:

  1. 引入 joi 模块

  2. 定义对象的验证规则

    所有的验证规则都是可选的,如果你传入的是一个空值,验证也会通过
    require() - 当前字段必须传值,否则验证不通过
    error() - 自定义错误信息

  3. 实施验证 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并下载(下载后,如果需要解压就解压),把下载好的拖到这个页面中即可

【设置 — 更多工具 — 扩展程序】

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值