关于上篇文章登录注册接口中bug修复

BUG描述

1
2
Cannot set headers after they are sent to the client
翻译过来就是:发送到客户端后无法设置标头

发送这个bug的原因

原因:在上个博客中app.js中的res.cc和router_handler的user.js中的regUser模块的判定用户名是否被占用中的res.cc发生冲突,因为在执行完判定后,它自动去执行了加入数据库那堆代码中的res.cc(err),相当于执行了两次.客户端发送一次请求,服务器给出了两次反映

解决

思路:给判定用户名中再添加一个if语句来判定,如果没被占用就执行insert操作,如果被占用,就直接返回错误信息

  • 原代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    exports.regUser = (req,res)=>{
    const userinfo = req.body

    const sql = 'select * from ev_users where username=?'
    db.query(sql,userinfo.username,(err,results)=>{
    if(err) return res.cc(err)
    if(results.length>0) return res.cc('用户名已经被占用')
    // console.log(results.length),如果为1,说明已经有该用户,如果为0,说明没有该用户,可以用于注册
    })
    // 加密密码
    userinfo.password = bcyptjs.hashSync(userinfo.password,10)
    // 执行sql
    const sqlStr = 'insert into ev_users set ?'
    db.query(sqlStr,{username:userinfo.username,password:userinfo.password},(err,results)=>{
    if(err) return res.cc(err)
    if(results.affectedRows !== 1) return res.cc('注册用户失败',1)
    res.cc('注册成功',0)
    })
    }
  • 修改后的代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    exports.regUser = (req,res)=>{
    const userinfo = req.body

    const sql = 'select * from ev_users where username=?'
    db.query(sql,userinfo.username,(err,results)=>{
    if(err) return res.cc(err)
    if(results.length>0) return res.cc('用户名已经被占用')
    if(results.length != 1){
    // 加密密码
    userinfo.password = bcyptjs.hashSync(userinfo.password,10)
    // 执行sql
    const sqlStr = 'insert into ev_users set ?'
    db.query(sqlStr,{username:userinfo.username,password:userinfo.password},(err,results)=>{
    if(err) return res.cc(err)
    if(results.affectedRows !== 1) return res.cc('注册用户失败',1)
    res.send({
    status:0,
    msg:'注册成功',
    })
    })
    }
    // console.log(results.length),如果为1,说明已经有该用户,如果为0,说明没有该用户,可以用于注册
    })
    }
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022 BieGua
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信