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

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

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

起初,在解决这个问题的时候我想到的是使用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只是跳出了查询的函数,还会继续执行插叙的命令,所以导致产生二次循环的问题。

正确代码:

我的错误案例:

创建用户注册接口时的两个小问题相关推荐

  1. strapi v4,调用用户注册接口时出现“Email is already take“的解决方法

    项目中开启了用户注册发邮确认邮件的功能,一开始整个注册流程都正常,后台修改了邮件发送的邮箱后主出现了报错"Email is already take",排查发现,原来以下两个地方邮 ...

  2. 闲时来两个小算法动动脑,防止不脱发操作【JavaScript实现冒泡和选择】

    <script>// . 数组的冒泡排序// 1 有一个无序的数字在数组中 var arrM = [4, 6, 67, 3, 8, 9, 5, 1, 2];for (var j = 0; ...

  3. 使用ASP.NET MVC 2编程时遇到的两个小问题

    使用MVC2开发一个web应用的时候,遇到两个小问题,这里做下记录: (1) 通过ADO.NET Entity Data Model设计数据库结构的时候,一般情况下,如果想使我们新添加或修改的内容生效 ...

  4. Java创建SpringBoot服务时yml文件显示粉色不显示绿色小叶子

    在做项目的时候遇到了一个问题:在搭建后台环境的时候创建Spring服务时yml文件显示粉色不显示绿色小叶子,而且一开始没注意,目录结构下的java目录和resources目录也不显示应有的蓝色和黄色的 ...

  5. 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。

    设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...

  6. 使用Postman测试https接口时的小问题记录

    测试本地的WebApi接口时,接口是https,自己写的用httpclient测试是可以的, 用postman一直连接不了.原因正是由于https,不过postman在界面上已经给出了可能的原因和解决 ...

  7. 子类实现父类接口时注解为啥报错_Java中的注解使用:全面性的总结一下

    前话: 今天,我们又来聊一下注解的使用,做一下详细的解析,也介绍了自定义注解,请耐心往下看哟! 注解的介绍: 在2005年,sun公司推出了jdk1.5,同时推出的注解功能吸引了很多人的目光,使用注解 ...

  8. 聊聊接口设计的36个小技巧

    前言 大家好,作为后端开发,不管是什么语言,Java.Go还是C++,其背后的后端思想都是类似的.后面打算出一个后端思想的技术专栏,主要包括后端的一些设计.或者后端规范相关的,希望对大家日常工作有帮助 ...

  9. 近两万字小程序攻略发布了

    该内容由银科控股融汇研发部曹俊及其团队授权提供.该团队拥有 10 多名小程序开发,深耕小程序领域,总结出了本篇优质长文.同时本篇内容也已经合并入我的 开源项目 中,目前项目内容包含了 JS.网络.浏览 ...

最新文章

  1. Android -- 消息处理机制源码分析(Looper,Handler,Message)
  2. springboot源码分析 - AbstractRoutingDataSource多数据源方案的分析
  3. 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
  4. C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
  5. sed 正则表达式【MAC地址】GLPI转换华为交换机MAC格式
  6. 删除超过10亿用户的数据,Facebook 关闭面部识别系统
  7. 贝叶斯决策理论对CIFAR-10数据图像分类
  8. Cinemachine教程 | Unity中如何快速制作相机切换动画?
  9. java.util.concurrent包(6)——CyclicBarrier使用
  10. js基础-8-浅拷贝和深拷贝
  11. 基于springboot的医院门诊管理系统
  12. 今天在当当上看到一本书,ASP.NET程序员参考手册
  13. [精品书单]3D打印机课程设计
  14. Acer 4750 安装黑苹果_黑苹果安装 你要知道的那些坑
  15. 微商伙伴微信手机号过滤技巧
  16. XDOJ 完全平方数
  17. JS显示当前时间(包含农历时间)
  18. 微软拼音开启小鹤双拼
  19. 小程序模板平台怎么选?
  20. 不要掉进PHP数组合并的坑。(初学者须知道)

热门文章

  1. 个人网站备案时ICP备案的网站建设方案书怎么写?
  2. 个人网站名称怎么写可以通过备案?
  3. 飞机订票系统部分操作
  4. 2023年全国最新高校辅导员精选真题及答案49
  5. Android 解决handler内存泄露的方法
  6. Linux命令中timedatectl、weget的使用以及如何创建目录
  7. 2.定时任务关闭Java服务
  8. 中国农村生活垃圾处理行业战略动态及投资前景规划报告2022-2028年版
  9. 某手安卓自动刷视频分析
  10. 团队管理28--管理沟通之全景图