node.js(expree.js )模拟手机验证码功能及登录功能

dbconfig.js

const mysql = require('mysql')
module.exports = {// 数据库配置config: {host: 'localhost', // 连接地址port: '3306', //端口号user: 'root',  //用户名password: 'wei630229', //密码database: 'exapp2', //数据库名},
// 连接数据库,使用mysql的连接池连接方式
// 连接池对象
sqlConnect: function (sql, sqlArr, callBack) {var pool = mysql.createPool(this.config)pool.getConnection((err, conn) => {console.log('12345')if (err) {console.log('连接失败');return;}// 事件驱动回调conn.query(sql, sqlArr, callBack);//释放连接conn.release();})}
}
var dbCongif = require("../utils/dbconfig");// 随机验证码
function rand(min, max) {return Math.floor(Math.random() * (max - min)) + min;
}// 声明验证码和手机号数组
ValidatePhoneCode = [];
// 判断该手机是否一定接收过该验证码
let sendCodeP = (phone) => {for (var item of ValidatePhoneCode) {console.log("item", item);if (phone == item.phone) {return true;}}return false;
};//
let findCodeAndPhone = (phone, code) => {for (var item of ValidatePhoneCode) {if (phone == item.phone && code == item.code) {return "login";}}return "error";
};// 验证码发送接口
sendCode = (req, res) => {// 判断该手机号是否一定接收过验证码let phone = req.query.phone;if (sendCodeP(phone)) {res.send({code: 400,msg: "已经发送过验证码,稍后再发",});}let codeMge = rand(1000, 9999);ValidatePhoneCode.push({phone: phone,code: codeMge,});res.send({code: 200,msg: "发送成功",});console.log("code", codeMge);
};// 验证码登录
codePhoneLogin = (req, res) => {let { phone, code } = req.query;// 判断手机号是否发送过验证码if (sendCodeP(phone)) {// 验证码和手机号是否匹配let state = findCodeAndPhone(phone, code);if (state == "login") {// 登录成功res.send({code: "200",mgs: "登录成功",});} else if (state == "error") {res.send({code: "500",mgs: "登录失败",});}} else {res.send({code: "400",mgs: "未发送验证码",});}
};module.exports = {sendCode, // 验证码接口codePhoneLogin, //  登录接口
};

测试验证码发送
在这里插入图片描述

测试登录
>**加粗样式**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416713.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter实操入门之登录

JMeter实操入门之登录 前言初级-无变量的登录线程组取样器-HTTP请求 进阶-定义变量的登录用户定义的变量获取JSON返回的数据-tokentoken设置全局变量 前言 安装及环境配置教程可移步:JMeter安装与配置环境 本篇文章针对小白进一步的认识及运用JMeter,围绕…

Linux编写简易shell

思路:​ ​ ​ 所以要写一个shell,需要循环以下过程:​ 获取命令行解析命令行建立一个子进程(fork)替换子进程(execvp)父进程等待子进程退出(wait) 实现代码:​ #inc…

力扣hot100 最长有效括号 动态规划

Problem: 32. 最长有效括号 文章目录 思路Code 思路 👨‍🏫 参考题解 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( n ) O(n) O(n) class Solution {public int longestValidParentheses(String s){int n s.length();…

顺序表(C/C++)

本篇将讲解一些关于顺序表的内容,顺序表分为静态顺序表和动态顺序表,其中经常用到的为动态顺序表,所以本篇将以动态顺序表为重点给出一些关于动态顺序表的操作。 因为顺序表的实现逻辑较为简单,对于代码的讲解大多以注释给出。 1…

IaC基础设施即代码:Terraform 使用 provider 自定义提供者

目录 一、实验 1.环境 2.Terraform 使用 provider 自定义提供者 (Resource) 3.Terraform 使用 provider 自定义提供者 (Module) 一、实验 1.环境 (1)主机 表1-1 主机 主机系统软件工具备注jia Windo…

深入数仓离线数据同步:问题分析与优化措施

一、前言 在数据仓库领域,离线数仓和实时数仓是常见的两种架构类型。离线数仓一般通过定时任务在特定时间点(通常是凌晨)将业务数据同步到数据仓库中。这种方式适用于对数据实时性要求不高,更侧重于历史数据分析和报告生成的场景…

2024.1.20每日一题

LeetCode 2788.按分隔符拆分字符串 2788. 按分隔符拆分字符串 - 力扣(LeetCode) 题目描述 给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组…

【Python】人工智能-机器学习——不调库手撕演化算法解决函数最小值问题

1 作业内容描述 1.1 背景 现在有一个函数 3 − s i n 2 ( j x 1 ) − s i n 2 ( j x 2 ) 3-sin^2(jx_1)-sin^2(jx_2) 3−sin2(jx1​)−sin2(jx2​),有两个变量 x 1 x_1 x1​ 和 x 2 x_2 x2​,它们的定义域为 x 1 , x 2 ∈ [ 0 , 6 ] x_1,x_2\in[0,6] …

Linux 【C编程】 引入线程,线程相关函数

1.线程的引入 1.1使用线程同时读取键盘和鼠标 代码演示&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <termios.h> #include <fcntl.h> #include <string.h> // 读取…

爬取的数据可以入表吗?怎样入表?

合规是数据入表的前提。当前爬虫数据是非常敏感的&#xff0c;因为爬虫极容易造成两大不合规的问题&#xff1a;一是没有经过个人同意获取数据&#xff0c;二是爬取的数据里可能含有个人敏感信息也是一个问题。现在法律对于这部分非常严苛&#xff0c;如果企业里有50条未获得授…

Pytest系列(2) - assert断言详细使用

前言 与unittest不同&#xff0c;pytest使用的是python自带的assert关键字来进行断言assert关键字后面可以接一个表达式&#xff0c;只要表达式的最终结果为True&#xff0c;那么断言通过&#xff0c;用例执行成功&#xff0c;否则用例执行失败 assert小栗子 想在抛出异常之…

算数移位,逻辑移位以及循环移位

目录 一.算数移位 1.原码的算数移位一一符号位保持不变&#xff0c;仅对数值位进行移位 2.反码的算数移位 3.补码的算数移位 二.逻辑移位 三.循环移位 一.算数移位 1.原码的算数移位一一符号位保持不变&#xff0c;仅对数值位进行移位 算数移位是通过改变各个数码位和小…