当前位置: 首页 > news >正文

node.js(express.js)+mysql实现注册功能

文章目录

  • 实现步骤
  • 一、获取客户端提交到服务器的用户信息,对表单中的数据,进行合法性的效验 代码如下:
  • 二、检测用户名是否被占用
  • 三、对密码进行加密
  • 四、插入新用户(完整代码)
  • 总结


实现步骤

一、获取客户端提交到服务器的用户信息,对表单中的数据,进行合法性的效验 代码如下:

// 注册新用户的接口
exports.regUser = (req, res) => {// 获取客户端提交到服务器的用户信息const userinfo = req.body;// 对表单中的数据,进行合法性的效验,如果有一项为空if (!userinfo.username || !userinfo.password) {return res.send({status: 1,message: "用户名或密码不合法",});}console.log(userinfo);
};

二、检测用户名是否被占用

/utils/db.js文件的代码如下:

const mysql = require("mysql");
const db = mysql.createPool({host: "localhost", // 连接地址port: "3306", //端口号user: "root", //用户名XXXXXXXXpassword: "XXXXXXXX", //密码database: "exapp2", //数据库名
});
module.exports = db;
var db = require("../utils/db");
// 注册新用户的接口
exports.regUser = (req, res) => {// 获取客户端提交到服务器的用户信息const userinfo = req.body;// 对表单中的数据,进行合法性的效验,如果有一项为空if (!userinfo.username || !userinfo.password) {return res.send({status: 1,message: "用户名或密码不合法",});}// 检验用户名是否被占用// 定义sql语句,查询用户名是否被占用var sql = `select * from ev_users where username=?`;db.query(sql, userinfo.username, (err, data) => {// 执行sql语句失败,if (err) {return res.send({status: 1,message: err.message,});}// 判断用户名是否被占用,data.length 大于0说明sql语句查到了该用户名,所以已定被占用if (data.length > 0) {// console.log("用户名被占用吗,请更换其他用户名");return res.send({status: 1,message: "用户名被占用吗,请更换其他用户名",});}//  res.send("ok");});console.log(userinfo);
};

三、对密码进行加密

项目安装指定版本bcryptjs库

 npm i bcryptjs@2.4.3
var db = require("../utils/db");
// 导入密码加密
const bcrypt = require("bcryptjs");
// 注册新用户的接口
exports.regUser = (req, res) => {// 获取客户端提交到服务器的用户信息const userinfo = req.body;// 对表单中的数据,进行合法性的效验,如果有一项为空if (!userinfo.username || !userinfo.password) {return res.send({status: 1,message: "用户名或密码不合法",});}// 检验用户名是否被占用// 定义sql语句,查询用户名是否被占用var sql = `select * from ev_users where username=?`;db.query(sql, userinfo.username, (err, data) => {// 执行sql语句失败,if (err) {return res.send({status: 1,message: err.message,});}// 判断用户名是否被占用,data.length 大于0说明sql语句查到了该用户名,所以已定被占用if (data.length > 0) {// console.log("用户名被占用吗,请更换其他用户名");return res.send({status: 1,message: "用户名被占用吗,请更换其他用户名",});}// 用户名可以使用,对密码进行加密// bcrypt.hashSync(客户端明文密码,10) // 第二个参数提高密码的安全性userinfo.password = bcrypt.hashSync(userinfo.password, 10);//console.log("@", userinfo.password);//  res.send("ok");});console.log(userinfo);
};

四、插入新用户(完整代码)

var db = require("../utils/db");
// 导入密码加密
const bcrypt = require("bcryptjs");
// 注册新用户的接口
exports.regUser = (req, res) => {// 获取客户端提交到服务器的用户信息const userinfo = req.body;// 1.对表单中的数据,进行合法性的效验,如果有一项为空if (!userinfo.username || !userinfo.password) {return res.send({status: 1,message: "用户名或密码不合法",});}// 2.检验用户名是否被占用// 定义sql语句,查询用户名是否被占用var sql = `select * from ev_users where username=?`;db.query(sql, userinfo.username, (err, data) => {// 执行sql语句失败,if (err) {return res.send({status: 1,message: err.message,});}// 判断用户名是否被占用,data.length 大于0说明sql语句查到了该用户名,所以已定被占用if (data.length > 0) {// console.log("用户名被占用吗,请更换其他用户名");return res.send({status: 1,message: "用户名被占用吗,请更换其他用户名",});}// 3.用户名可以使用,对密码进行加密// bcrypt.hashSync(客户端明文密码,10) // 第二个参数提高密码的安全性userinfo.password = bcrypt.hashSync(userinfo.password, 10);// 4.插入新用户// 定义插入新用户的sql语句let sql1 = "insert into ev_users set ?";// 调用db.query()执行sql语句db.query(sql1,{ username: userinfo.username, password: userinfo.password,},function (err, data) {// 判断sql语句是否执行成功if (err) {return res.send({ status: 1, message: err.message });}// 判断影响行数是否为1if (data.affectedRows !== 1) {return res.send({ status: 1, message: "注册用户失败,请稍后再试" });}//注册成功res.send({ status: 0, message: "注册成功!" });});//  res.send("ok");});console.log(userinfo);
};

在这里插入图片描述

总结

再插入新用户时输入中文username mysql会 出现字符集不匹配的情况
报错情况如下:
ER_CANT_AGGREGATE_2COLLATIONS: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’
原因: mysql数据库建表的时候采用的是latin的字符集,而网页中查询的是utf-8

解决方法:在你自己的数据库中分别执行一下sql

SET collation_connection = 'utf8_general_ci'

ps: your_database_name为你自己的数据库名称,
your_table_name为你自己的表的名称

ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ciALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

相关文章:

node.js(express.js)+mysql实现注册功能

文章目录 实现步骤一、获取客户端提交到服务器的用户信息,对表单中的数据,进行合法性的效验 代码如下:二、检测用户名是否被占用三、对密码进行加密四、插入新用户(完整代码)总结 实现步骤 一、获取客户端提交到服务器的用户信息…...

AI绘画Stable Diffusion进阶使用

本文讲解,模型底模,VAE美化模型,Lora模型,hypernetwork。 文本Stable Diffusion 简称sd 欢迎关注 使用模型 C站:https://civitai.com/ huggingface:https://huggingface.co/models?pipeline_tagtext-to-…...

C 练习实例33 - 质数(素数)判断

题目:判断一个数字是否为质数。 程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。 这题做过很多遍了,懂得都懂。 代码…...

docker环境下mongo副本集的部署及异常修复

最近更换了办公地点。部署在本地docker环境里的mongo数据库不能使用了。原因是本地的ip地址变更。以前的mongo副本集的配置需要更新。处理完后,索性重新记录一下mongo副本集在docker中的部署流程。 mongo的事务及副本集 我们先了解一下什么是事务,事务…...

【Java】Maven的安装与配置

初识Maven Maven是专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构 提供了一套标准化的构建流程(编译,测试,打包,发布……) 提供了一套依赖管理机制 标准化的…...

向量和向量如何相乘?

向量与向量相乘主要有两种方式:点积(内积)和叉积(外积)。这两种运算的结果和应用是不同的。 点积(内积): 点积是两个向量的对应元素相乘后再求和的结果,通常用于计算两个…...

计算机组成原理 指令流水线

文章目录 指令流水线指令流水线的概念流水线性能分析流水线的吞吐率流水线的加速比流水线的效率 影响流水线的因素结构相关 (资源冲突)数据相关 (数据冲突)控制相关 (控制冲突) 流水线分类超量流水线 指令流水线 #mermaid-svg-sWaRASMFAvh8sLJk {font-family:"trebuchet m…...

macOS - md5 | md5sum

文章目录 简单使用介绍文档Linux - md5summacOS - md5 大文件传输是否完整,你可以使用 md5 进行校验 linux 上使用 md5sum 命令,在macOS 上 md5 命令是和 md5sum 等效的 简单使用介绍 参考:https://blog.csdn.net/cnds123321/article/detail…...

Tomcat快速入门

1.Tomcat介绍 Apache Tomcat 是由 Apache Software Foundation(ASF)开发的一个开源 Java WEB 应用服务器,如apache处理静态HTML能力突出不同,tomcat处理动态HTML能力相当强大,因此一般项目都是部署apachetomcat&#…...

如何结合antd design pro 5 结合express 上传多个文件

在Ant Design Pro 5(基于React)的前端界面结合Express后端实现上传整个文件夹的文件,实际上是在前端进行多文件选择,并通过POST请求将文件列表发送到后端,然后由后端处理上传。由于浏览器API限制,直接上传整…...

Django随笔

关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app,在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中(改成中文) LA…...

线程和进程的区别(从JVM角度出发)

进程与线程的区别 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进…...

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员&#xf…...

计算矩阵边缘元素之和(c++)

题目描述 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 输入格式 第一行分别为矩阵的行数 和列数 &#xff08;m<100&#xff0c;n<100&#xff09;&#xff0c…...

java使用jsch处理软链接判断是否文件夹

前言 这一次主要是碰到一个问题。因为使用jsch去读取文件的时候&#xff0c;有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹&#xff1f;因为他没有提供可以直接读取的方法&#xff0c;用权限信息去判断…...

【2023】java使用WebClient实现chatGPT调用建立web socket连接

&#x1f4bb;目录 一、介绍1、使用技术2、效果 二、代码1、前端代码2、后端代码2.1、maven依赖2.2、model2.2.1、请求接口的格式2.2.2、响应数据对象 2.3、工具类2.3.1、&#x1f534;使用WebClient调用chatgpt方法2.3.2、&#x1f7e0; webSocket连接对话方法 2.4、Controlle…...

力扣【四数之和】

一、题目描述 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#x…...

IMX6LL|linux设备驱动模型

linux设备驱动模型 为什么需要设备驱动模型 早期内核&#xff08;2.4之前&#xff09;没有统一的设备驱动模型&#xff0c;但照样可以用2.4~2.6期间使用devfs&#xff0c;挂载在/dev目录。 需要在内核驱动中创建设备文件(devfs_register)&#xff0c;命名死板 2.6以后使用sys…...

2023年的技术总结和工作反思

一、回顾2023年 回顾自己的2023年&#xff0c;还是发生了很多的变化。在大学毕业&#xff0c;就来到了芯翼参加工作&#xff0c;在这里也遇到了很多的前辈和小伙伴&#xff0c;收获工作的同时也收获了友情。但是&#xff0c;随着公司发展战略的变化&#xff0c;公司的人员架构…...

Stable Diffusion中的Embeddings

什么是Embeddings&#xff1f; Embeddings是一种数学技术&#xff0c;它允许我们将复杂的数据&#xff08;如文本或图像&#xff09;转换为数值向量。这些向量是高维空间中的点&#xff0c;可以捕捉数据的关键特征和属性。在文本处理中&#xff0c;例如&#xff0c;embeddings可…...

如何快速打开github

作为一个资深码农&#xff0c;怎么能不熟悉全球最大的同性交友社区——github呢&#xff0c;但头疼的是github有时能打开&#xff0c;有时打不开&#xff0c;这是怎么回事&#xff1f; 其实问题出在github.com解析DNS上&#xff0c;并不是需要FQ。下面提供一个方法&#xff0c;…...

【sql/python】表中某列值以列表聚合

需求背景&#xff1a; 有一个表含有两个字段 “ID”,“VALUE” 1,香蕉 1,苹果 2,橘子 3,香蕉 3,苹果 3,橘子 目标要求&#xff1a;将每个ID的VALUE列聚合成一个字符串列表 “ID”,“VALUE” 1,[香蕉,苹果] 2,[橘子] 3,[香蕉,苹果,橘子] 一、SQL使用 LISTAGG函数聚合方式 ---将…...

大模型实战营Day6 作业

基础作业 使用 OpenCompass 评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能 环境配置 conda create --name opencompass --clone/root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/opencompass cd openco…...

C#,入门教程(20)——列表(List)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(19)——循环语句&#xff08;for&#xff0c;while&#xff0c;foreach&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124060844 List顾名思义就是数据列表&#xff0c;区别于数据数组&#xff08;arr…...

【蓝桥杯日记】复盘篇一:深入浅出顺序结构

&#x1f680;前言 本期是一篇关于顺序结构的题目的复盘,通过复盘基础知识&#xff0c;进而把基础知识学习牢固&#xff01;通过例题而进行复习基础知识。 &#x1f6a9;目录 前言 1.字符三角形 分析&#xff1a; 知识点&#xff1a; 代码如下 2. 字母转换 题目分析: 知…...

尚无忧【无人共享空间 saas 系统源码】无人共享棋牌室系统源码共享自习室系统源码,共享茶室系统源码

可saas多开&#xff0c;非常方便&#xff0c;大大降低了上线成本 UNIAPPthinkphpmysql 独立开源&#xff01; 1、定位功能&#xff1a;可定位附近是否有店 2、能通过关键字搜索现有的店铺 3、个性轮播图展示&#xff0c;系统公告消息提醒 4、个性化功能展示&#xff0c;智能…...

SQL Server 恢复软件

Datanumen SQL Server 软件主要特点 支持 Microsoft SQL Server 2005、2008、2008 R2、2012、2014、2016、2017、2019、2022 。 恢复表中的架构/结构和数据。 恢复所有数据类型&#xff0c;包括 ASCII 和 Unicode XML 数据类型。 恢复稀疏列。 恢复数据库表中已删除的记录…...

奇安信天擎 rptsvr 任意文件上传漏洞复现

0x01 产品简介 奇安信天擎是奇安信集团旗下一款致力于一体化终端安全解决方案的终端安全管理系统(简称“天擎”)产品。通过“体系化防御、数字化运营”方法,帮助政企客户准确识别、保护和监管终端,并确保这些终端在任何时候都能可信、安全、合规地访问数据和业务。天擎基于…...

Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)

关于代理 正向代理: 客户明确知道自己访问的网站是什么 隐藏客户端的信息 目录 关于代理 一、Nginx的安装与配置 1、安装依赖 2、安装nginx &#xff08;1&#xff09;上传压缩包到目录 /usr/nginx里面 &#xff08;2&#xff09;解压文件 &#xff08;3&#xff09…...

阿里云GPU服务器ECS实例规格详细说明

阿里云GPU服务器提供GPU加速计算能力&#xff0c;GPU卡支持A100、V100、T4、P4、P100、A10等&#xff0c;NVIDIA V100&#xff0c;GPU实例规格是什么意思&#xff1f;如搭载NVIDIA V100的ecs.gn6v-c8g1.2xlarge、A10卡ecs.gn7i-c32g1.8xlarge、T4卡ecs.gn6i-c4g1.xlarge、P4卡e…...