创建用户注册接口时的两个小问题
今天在创建用户注册接口时,出现了两个小问题:①利用遍历对象的方法判断接收的数据是否为空;②判断用户名是否已经存在。经过反复尝试后,最终找到了解决方法,现在分享给大家!
一、遍历对象的方法判断请求的到的数据是否为空
这个问题是为了解决在用户注册时,需要将接收到的数据插入数据库,但是在插入数据库时,肯定需要先判断用户是不是将用户信息填写完整了,所以需要先判断一下是否为空。
起初,在解决这个问题的时候我想到的是使用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只是跳出了查询的函数,还会继续执行插叙的命令,所以导致产生二次循环的问题。
正确代码:
我的错误案例:
创建用户注册接口时的两个小问题相关推荐
- strapi v4,调用用户注册接口时出现“Email is already take“的解决方法
项目中开启了用户注册发邮确认邮件的功能,一开始整个注册流程都正常,后台修改了邮件发送的邮箱后主出现了报错"Email is already take",排查发现,原来以下两个地方邮 ...
- 闲时来两个小算法动动脑,防止不脱发操作【JavaScript实现冒泡和选择】
<script>// . 数组的冒泡排序// 1 有一个无序的数字在数组中 var arrM = [4, 6, 67, 3, 8, 9, 5, 1, 2];for (var j = 0; ...
- 使用ASP.NET MVC 2编程时遇到的两个小问题
使用MVC2开发一个web应用的时候,遇到两个小问题,这里做下记录: (1) 通过ADO.NET Entity Data Model设计数据库结构的时候,一般情况下,如果想使我们新添加或修改的内容生效 ...
- Java创建SpringBoot服务时yml文件显示粉色不显示绿色小叶子
在做项目的时候遇到了一个问题:在搭建后台环境的时候创建Spring服务时yml文件显示粉色不显示绿色小叶子,而且一开始没注意,目录结构下的java目录和resources目录也不显示应有的蓝色和黄色的 ...
- 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。
设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...
- 使用Postman测试https接口时的小问题记录
测试本地的WebApi接口时,接口是https,自己写的用httpclient测试是可以的, 用postman一直连接不了.原因正是由于https,不过postman在界面上已经给出了可能的原因和解决 ...
- 子类实现父类接口时注解为啥报错_Java中的注解使用:全面性的总结一下
前话: 今天,我们又来聊一下注解的使用,做一下详细的解析,也介绍了自定义注解,请耐心往下看哟! 注解的介绍: 在2005年,sun公司推出了jdk1.5,同时推出的注解功能吸引了很多人的目光,使用注解 ...
- 聊聊接口设计的36个小技巧
前言 大家好,作为后端开发,不管是什么语言,Java.Go还是C++,其背后的后端思想都是类似的.后面打算出一个后端思想的技术专栏,主要包括后端的一些设计.或者后端规范相关的,希望对大家日常工作有帮助 ...
- 近两万字小程序攻略发布了
该内容由银科控股融汇研发部曹俊及其团队授权提供.该团队拥有 10 多名小程序开发,深耕小程序领域,总结出了本篇优质长文.同时本篇内容也已经合并入我的 开源项目 中,目前项目内容包含了 JS.网络.浏览 ...
最新文章
- Android -- 消息处理机制源码分析(Looper,Handler,Message)
- springboot源码分析 - AbstractRoutingDataSource多数据源方案的分析
- 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
- C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
- sed 正则表达式【MAC地址】GLPI转换华为交换机MAC格式
- 删除超过10亿用户的数据,Facebook 关闭面部识别系统
- 贝叶斯决策理论对CIFAR-10数据图像分类
- Cinemachine教程 | Unity中如何快速制作相机切换动画?
- java.util.concurrent包(6)——CyclicBarrier使用
- js基础-8-浅拷贝和深拷贝
- 基于springboot的医院门诊管理系统
- 今天在当当上看到一本书,ASP.NET程序员参考手册
- [精品书单]3D打印机课程设计
- Acer 4750 安装黑苹果_黑苹果安装 你要知道的那些坑
- 微商伙伴微信手机号过滤技巧
- XDOJ 完全平方数
- JS显示当前时间(包含农历时间)
- 微软拼音开启小鹤双拼
- 小程序模板平台怎么选?
- 不要掉进PHP数组合并的坑。(初学者须知道)