一、密码加密
通过bcryptjs加密
(1)在终端输入
npm i bcrypyjs@2.4.3
(2)在router-handler文件夹下的user.js引入
const bcrypt = require('bcryptjs')
在exports.register里面写
userInfo.password = bcrypt.hashSync(userInfo.password,10)
如单纯测试,可以写
const bcrypt = require('bcryptjs');
var a = bcrypt.hashSync('666666',10);
console.log(a);
二、向mysql插入数据
在加密的语句后面写
const sql = 'insert into people set ?';
db.query(aql,{name:userInfo.name,password:userInfo.password},(err,results)=>{
if(err) return res.send({status:1,message:err.message});
if(results.affectedRows !== 1) return res.send({status:1,message:"注册失败"});
res.send({status:0,message:"注册成功"})
})
三、利用中间件优化
(1)在app.js的路由前面(也就是 const userRouter = require('./router/user') 前面)
app.use((req,res,next)=>{
res.cc = function (err,status = 1){
res.send({
status,
message:err instanceof Error ? err.message : err,
})
}
next()
})
(2)在outer-handler文件夹下的user.js 通过 res.cc()调用
const db = require('../db/index')
const bcrypt = require('bcryptjs')
exports.register = (req,res)=>{
const userInfo = req.body;
if(!userInfo.name || !userInfo.password){
return res.send({
status:1,
message:"用户名和密码不能为空"
})
}
const sqlStr = 'select * from people where name=?';
db.query(sqlStr,userInfo.name,(err,results)=>{
if(err){
return res.cc(err)
// return res.send({
// status:1,
// message:err.message
// })
}
if(results.length > 0 ){
return res.cc("用户名被占用")
}
// 密码加密
userInfo.password = bcrypt.hashSync(userInfo.password,10);
// 插入 SQL语句
const sql = 'insert into people set ?';
db.query(sql,{name:userInfo.name,password:userInfo.password},(err,results)=>{
if(err) return res.cc(err);
if(results.affectedRows !== 1) return res.cc("注册失败");
res.cc("注册成功",0);
})
})
res.send('注册')
}
exports.login = (req,res)=>{
const userinfo = req.body;
const sql = `select * from people where name=? `
db.query(sql,userinfo.name,(err,results)=>{
if(err) return res.cc(err);
if(results.length !== 1) return res.cc("登录失败");
res.send('登录')
})
}
四、验证(省略,数据就不验证了,某天补充)
用 @hapi/joi 定义验证规则
用 @escook/express-joi 将验证规则应用到路由