1.安装
npm install @escook/express-joi
npm install joi@17.4.0
2.使用
2.1创建一个schema文件夹
说明:用于表单规则集,设置表单的规划的
// 导入定义验证的包
const joi = require("joi");
// 定义用户名和密码的验证规则
const username = joi.string().alphanum().min(1).max(10).required();
//string():表示该参数必须是一个字符串类型。
//alphanum():表示该参数必须由字母和数字组成。
//min(1):表示该参数的长度必须至少为1个字符。
//max(10):表示该参数的长度不能超过10个字符。
//required():表示该参数是必填项,如果没有传入该参数,则会抛出错误。
const password = joi.string().pattern(/^[\S]{6,12}$/).required();
//pattern()是定义的正则,由字母、数字或空格组成;长度必须在6到12个字符之间。
2.2创建router文件夹
说明:这是用来放置处理请求的代码。
//注册新用户
router.post("/register",expressJoi(reg_login_schma),register)
//登录
router.post("/login",expressJoi(reg_login_schma),login)
2.3处理函数的代码
//导入数据库操作模块
const db = require("../db/index");
//导入bcryptjs
const bcrypt = require("bcryptjs");
// 导入生成Token的包
const jwt = require("jsonwebtoken");
// 导入全局的配置文件,配置jwtSecreKey和expiresIn
const config = require("../config");
//注册用户的处理函数
exports.register = (req, res) => {
//获取客服端提交到服务器的用户信息
const userinfo = req.body;
const sqlStr = "select * from ev_users where username=?";
db.query(sqlStr, [userinfo.username], (err, result) => {
if (err) {
// return res.send({
// status: 1,
// message: err.message,
// });
//封装的函数res.cc
return res.cc(err);
}
//判断用户名是否被占用,前台传过来的数据,但是在后台查询到了,所有已经有数据
if (result.length > 0) {
// return res.send({
// status: 1,
// message: "用户名被占用,请更换用户名",
// });
return res.cc("用户名被占用,请更换用户名");
}
//用户名可以使用
// bcrypt.hashSync()对密码进行加密
userinfo.password = bcrypt.hashSync(userinfo.password, 10);
//定义插入用户的sql语句
const sql = "insert into ev_users set?";
db.query(
sql,{ username: userinfo.username, password: userinfo.password },
(err, results) => {
// 判断sql语句是否成功
if (err) {
// return res.send({
// status: 1,
// message: err.message,
// });
return res.cc(err);
}
// 判断影响函数是否为1
if (results.affectedRows !== 1) {
// return res.send({
// status: 1,
// message: "注册用户失败,请稍后再试",
// });
return res.cc("注册用户失败,请稍后再试");
}
//注册用户成功
// res.send({
// status:0,
// message:"注册成功"
// })
return res.cc("注册成功", 0);
}
);
});
};
2.4测试
2.4.1失败
2.4.2成功
2.5数据库