• nodejs--开发自己的项目——2.1——注册用户信息


    • 检测提交表单数据是否合法
    • 检测用户名是否被占用
    • 对密码进行加密处理(不是明文的密码)
    • 插入新用户

     检测提交表单数据是否合法

     首先进行检测,是否可以接收表单数据req.body

    在路由处理函数中进行表单数据的处理——第一步检验 

    1. //对表单中的数据进行合法性的校验
    2. if(!userInfo.username||!userInfo.password){
    3. return res.send(
    4. {
    5. status:1,
    6. message:'用户名或者密码不合法'
    7. }
    8. )
    9. }

    检测用户名是否被占用

     导入数据库模块——根据提交的表单数据——在数据库中查找是否有相同名称的

    1. //定义SQL语句,查询用户名是否被占用
    2. const sqlStr='select * from ev_users where username=?'//sql语句
    3. db.query(sqlStr,[userInfo.username],(err,results)=>{
    4. if(err) return res.send(//执行SQL语句失败
    5. {
    6. status:1,
    7. message:err.message
    8. }
    9. )
    10. if(results.length>0) return res.send(//select查询的结果是数组,用户名被占用
    11. {
    12. status:1,
    13. message:'用户名被占用,请更换用户名'
    14. })
    15. //用户名可用使用
    16. })

     这里有个注意点--res.send只能发送一次 ,多次就出现了问题

     这里的密码是明文存储的——说明数据库被盗了之后,密码很危险,希望密码是加密处理的

    对密码进行加密处理(不是明文的密码)——存到表中的是加密的密码

              使用包:bcryp.js包(加密之后的密码,无法被逆向破解同一明文密码多次加密(张三和李四如果密码相同,加密结果不同),得到的加密结果各不相同,保证了安全性)调用bcrypt.hashSync进行加密--归还给userInfo

    安装对应的包: npm i bcryptjs@加版本

    1. //调用bcrypt.hashSync进行加密--归还给userInfo
    2. userInfo.password=bcrypt.hashSync(userInfo.password,10)//加密的内容

    插入新用户(SQL语句)

    1. //定义插入新用户的SQL语句——插入的少使用表(字段)values(值) 插入多使用set
    2. const sqlStr1='insert into ev_users set ?'
    3. db.query(sqlStr1,{username:userInfo.username,password:userInfo.password},(err,results)=>{
    4. if(err) return res.send(//执行SQL语句失败
    5. {
    6. status:1,
    7. message:err.message
    8. }
    9. )
    10. if(results.affectedRows!==1)return res.send(//判断影响行数是否为1
    11. {
    12. status:1,
    13. message:'注册用户失败,请稍后再试!'
    14. }
    15. )
    16. res.send(
    17. {
    18. status:0,
    19. message:'注册用户成功!'
    20. }
    21. )//响应给客户端的话
    22. })

    目前该路由处理函数的总代码——

    1. //对应的路由处理函数
    2. //导入数据库操作模块
    3. const db=require('../db/index')
    4. //检测数据库是否导入成功
    5. // db.query('select 1',(err,results)=>{
    6. // if(err) return console.log(err.message)
    7. // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
    8. // })
    9. //导入bcryptjs包对明文密码进行加密
    10. const bcrypt=require('bcryptjs')
    11. //这是注册新用户的处理函数
    12. const regUser=function(req,res){//postreq.body
    13. //获取客户端提交给服务器的用户信息
    14. const userInfo=req.body
    15. //console.log(userInfo)——测试是否接收到表单数据
    16. //对表单中的数据进行合法性的校验
    17. if(!userInfo.username||!userInfo.password){
    18. return res.send(
    19. {
    20. status:1,
    21. message:'用户名或者密码不合法'
    22. }
    23. )
    24. }
    25. //定义SQL语句,查询用户名是否被占用
    26. const sqlStr='select * from ev_users where username=?'//sql语句
    27. db.query(sqlStr,[userInfo.username],(err,results)=>{
    28. if(err) return res.send(//执行SQL语句失败_
    29. {
    30. status:1,
    31. message:err.message
    32. }
    33. )
    34. if(results.length>0) return res.send(//select查询的结果是数组,用户名被占用——查询不会影响行数
    35. {
    36. status:1,
    37. message:'用户名被占用,请更换用户名'
    38. })
    39. //用户名可用使用
    40. //调用bcrypt.hashSync进行加密--归还给userInfo
    41. userInfo.password=bcrypt.hashSync(userInfo.password,10)//加密的内容
    42. //console.log(userInfo)
    43. //定义插入新用户的SQL语句——插入的少使用表(字段)values(值) 插入多使用set
    44. const sqlStr1='insert into ev_users set ?'
    45. db.query(sqlStr1,{username:userInfo.username,password:userInfo.password},(err,results)=>{
    46. if(err) return res.send(//执行SQL语句失败
    47. {
    48. status:1,
    49. message:err.message
    50. }
    51. )
    52. if(results.affectedRows!==1)return res.send(//判断影响行数是否为1
    53. {
    54. status:1,
    55. message:'注册用户失败,请稍后再试!'
    56. }
    57. )
    58. res.send(
    59. {
    60. status:0,
    61. message:'注册用户成功!'
    62. }
    63. )//响应给客户端的话
    64. })
    65. })
    66. }
    67. //这是登录的处理函数
    68. const login=function(req,res){//post
    69. res.send('注册OK')//响应给客户端的话
    70. }
    71. //向外暴露
    72. module.exports={
    73. regUser,
    74. login
    75. }

  • 相关阅读:
    c++ || 二分查找
    【ITRA】2022年ITRA赛事注册流程 从0-1
    fastapi-Depends
    R 语言详细安装教程(保姆级)及 RStudio简易安装教程
    共享充电宝APP小程序开发解决方案
    ARM开发初级-STM32F4寄存器-学习笔记03
    4.mybatis 高级结果查询
    音频编码格式介绍-AAC
    Oracle 11g数据库的安装与使用教程(详细版,已亲测)
    Spring Boot 使用 Passay 库的自定义密码验证器
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126859169