创建用户注册接口时的两个小问题

        今天在创建用户注册接口时,出现了两个小问题:①利用遍历对象的方法判断接收的数据是否为空;②判断用户名是否已经存在。经过反复尝试后,最终找到了解决方法,现在分享给大家!

一、遍历对象的方法判断请求的到的数据是否为空

        这个问题是为了解决在用户注册时,需要将接收到的数据插入数据库,但是在插入数据库时,肯定需要先判断用户是不是将用户信息填写完整了,所以需要先判断一下是否为空。

        起初,在解决这个问题的时候我想到的是使用if-else判断,通过判断获取到的对象中每一个属性的属性值是否为空,去解决这个问题,并且也实现了这个功能,但是在后期发现,这种方法比较繁琐,所有考虑使用遍历数组的方式,实现这个功能。

       话不多说,直接上代码:

var obj = req.body;
    var count = 400;
    for (var k in obj) {
        console.log(k, obj[k])
        count++;
        if (!obj[k]) {
            res.send({ code: count, msg: `${k}不能为空` });
            return;
        }
    }
    if (!/^1[3-9]\d{9}$/.test(obj.phone)) {
        res.send({ code: 405, msg: 'phone格式错误' });
        return;
    }

        这里需要注意的就是:如果还要判断其他条件,判断语句一定要写到for..in的外面,这次就是在这里吃了大亏。

二、判断用户名是否已经存在

        当用户在输入用户名时,需要去判断以下用户名是否已经被占用,所以想到了通过查询数据数据库中uname是否等于接收到的uname,但是我在试图实现这个想法的时候出现了一些小错误,导致产生了bug。

        因为需要判断在查询完数据库之后,拿到的result是否为空,如果为空,直接响应“用户已经存在”,然后跳出函数体。

        接下来上代码:

//创建sql命令,查询用户名是否存在
    pool.query('select * from xz_user where uname=?', [obj.uname], (err, result) => {
        if (err) throw err;
        if (result.length) {
            res.send({ code: 406, msg: '用户名已存在' })
            return;
            //想要实现 判断用户名是否已经存在,通过查询数据库是否存在uname=当前请求回来的uname
            //拿到结果后,想要直接结束并响应结果  但是产生了二次响应的问题
        }
        //创建sql命令,插入数据库
        pool.query('insert into xz_user set ?', [obj], (err, result) => {
            if (err) throw err;
            res.send({ code: 200, msg: '用户注册成功', data: result })
        })
    });

        就是在写查询和插入这两个命令的时候,产生了二次响应的问题,后来发现应该是把插入命令放在查询语句的里面,这样才能让return跳出这个接口函数。

        但是如果把两个命令分开写,程序在执行完查询语句的时候,执行完查询命令后,return只是跳出了查询的函数,还会继续执行插叙的命令,所以导致产生二次循环的问题。

正确代码:

 我的错误案例:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值