首先进行检测,是否可以接收表单数据req.body
在路由处理函数中进行表单数据的处理——第一步检验

- //对表单中的数据进行合法性的校验
- if(!userInfo.username||!userInfo.password){
- return res.send(
- {
- status:1,
- message:'用户名或者密码不合法'
- }
- )
- }
导入数据库模块——根据提交的表单数据——在数据库中查找是否有相同名称的
- //定义SQL语句,查询用户名是否被占用
- const sqlStr='select * from ev_users where username=?'//sql语句
-
- db.query(sqlStr,[userInfo.username],(err,results)=>{
-
- if(err) return res.send(//执行SQL语句失败
- {
- status:1,
- message:err.message
- }
- )
- if(results.length>0) return res.send(//select查询的结果是数组,用户名被占用
- {
- status:1,
- message:'用户名被占用,请更换用户名'
- })
- //用户名可用使用
-
-
- })
这里有个注意点--res.send只能发送一次 ,多次就出现了问题
这里的密码是明文存储的——说明数据库被盗了之后,密码很危险,希望密码是加密处理的
使用包:bcryp.js包(加密之后的密码,无法被逆向破解、同一明文密码多次加密(张三和李四如果密码相同,加密结果不同),得到的加密结果各不相同,保证了安全性)调用bcrypt.hashSync进行加密--归还给userInfo
安装对应的包: npm i bcryptjs@加版本

- //调用bcrypt.hashSync进行加密--归还给userInfo
- userInfo.password=bcrypt.hashSync(userInfo.password,10)//加密的内容
- //定义插入新用户的SQL语句——插入的少使用表(字段)values(值) 插入多使用set
- const sqlStr1='insert into ev_users set ?'
- db.query(sqlStr1,{username:userInfo.username,password:userInfo.password},(err,results)=>{
- if(err) return res.send(//执行SQL语句失败
- {
- status:1,
- message:err.message
- }
- )
- if(results.affectedRows!==1)return res.send(//判断影响行数是否为1
- {
- status:1,
- message:'注册用户失败,请稍后再试!'
- }
- )
- res.send(
- {
- status:0,
- message:'注册用户成功!'
- }
- )//响应给客户端的话
-
- })
目前该路由处理函数的总代码——
- //对应的路由处理函数
-
- //导入数据库操作模块
- const db=require('../db/index')
- //检测数据库是否导入成功
- // db.query('select 1',(err,results)=>{
-
- // if(err) return console.log(err.message)
-
- // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
-
- // })
- //导入bcryptjs包对明文密码进行加密
- const bcrypt=require('bcryptjs')
- //这是注册新用户的处理函数
- const regUser=function(req,res){//postreq.body
- //获取客户端提交给服务器的用户信息
- const userInfo=req.body
- //console.log(userInfo)——测试是否接收到表单数据
- //对表单中的数据进行合法性的校验
- if(!userInfo.username||!userInfo.password){
- return res.send(
- {
- status:1,
- message:'用户名或者密码不合法'
- }
- )
- }
- //定义SQL语句,查询用户名是否被占用
- const sqlStr='select * from ev_users where username=?'//sql语句
- db.query(sqlStr,[userInfo.username],(err,results)=>{
-
- if(err) return res.send(//执行SQL语句失败_
- {
- status:1,
- message:err.message
- }
- )
- if(results.length>0) return res.send(//select查询的结果是数组,用户名被占用——查询不会影响行数
- {
- status:1,
- message:'用户名被占用,请更换用户名'
- })
- //用户名可用使用
- //调用bcrypt.hashSync进行加密--归还给userInfo
- userInfo.password=bcrypt.hashSync(userInfo.password,10)//加密的内容
- //console.log(userInfo)
-
- //定义插入新用户的SQL语句——插入的少使用表(字段)values(值) 插入多使用set
- const sqlStr1='insert into ev_users set ?'
- db.query(sqlStr1,{username:userInfo.username,password:userInfo.password},(err,results)=>{
- if(err) return res.send(//执行SQL语句失败
- {
- status:1,
- message:err.message
- }
- )
- if(results.affectedRows!==1)return res.send(//判断影响行数是否为1
- {
- status:1,
- message:'注册用户失败,请稍后再试!'
- }
- )
- res.send(
- {
- status:0,
- message:'注册用户成功!'
- }
- )//响应给客户端的话
-
- })
-
- })
-
- }
- //这是登录的处理函数
- const login=function(req,res){//post
- res.send('注册OK')//响应给客户端的话
- }
- //向外暴露
- module.exports={
- regUser,
- login
- }