Node.js MySQL登录示例教程
nodejs mysql登录demo

首页 2025-07-14 16:10:21



Node.js 与 MySQL 登录示例:构建高效且安全的用户认证系统 在当今的数字化时代,构建高效且安全的用户认证系统是任何Web应用不可或缺的一部分

    Node.js,作为一个基于Chrome V8引擎的JavaScript运行时环境,以其异步I/O和非阻塞事件驱动模型,成为了开发高性能、可扩展Web应用的热门选择

    而MySQL,作为一个广泛使用的开源关系型数据库管理系统,以其稳定性和丰富的功能,成为存储和管理用户数据的理想解决方案

    本文将详细介绍如何使用Node.js与MySQL构建一个基本的登录系统,涵盖从数据库设置到实现用户注册与登录的全过程,同时强调安全性与最佳实践

     一、环境准备 在开始之前,请确保您已经安装了以下软件: 1.Node.js:可以从【Node.js官网】(https://nodejs.org/)下载并安装最新稳定版本

     2.MySQL:可以从【MySQL官网】(https://dev.mysql.com/downloads/mysql/)下载并安装MySQL服务器,或者使用Docker等容器技术快速部署

     3.MySQL Workbench(可选):一个图形化管理工具,方便数据库的设计与管理

     二、项目初始化 1.创建项目目录: bash mkdir node-mysql-login-demo cd node-mysql-login-demo 2.初始化Node.js项目: bash npm init -y 3.安装必要的依赖: 我们将使用`express`作为Web框架,`mysql2`作为MySQL客户端库,`bcryptjs`进行密码哈希处理,`jsonwebtoken`(JWT)实现JWT认证

     bash npm install express mysql2 bcryptjs jsonwebtoken body-parser cors 三、设置MySQL数据库 1.创建数据库和用户表: 打开MySQL命令行工具或MySQL Workbench,创建一个名为`login_demo`的数据库,并在其中创建一个`users`表

     sql CREATE DATABASE login_demo; USE login_demo; CREATE TABLE users( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL ); 四、构建Node.js服务器 1.项目结构: 创建以下文件和目录结构: node-mysql-login-demo/ ├── controllers/ │├── authController.js ├── models/ │├── db.js ├── routes/ │├── authRoutes.js ├── app.js ├── package.json └── .env 2.配置数据库连接(models/db.js): 使用`mysql2`库建立与MySQL数据库的连接

    同时,为了安全起见,将数据库配置信息存储在`.env`文件中,并通过`dotenv`库加载

     .env: plaintext DB_HOST=localhost DB_USER=root DB_PASSWORD=yourpassword DB_DATABASE=login_demo models/db.js: javascript require(dotenv).config(); const mysql = require(mysql2); const connection = mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE }); connection.connect(err =>{ if(err) throw err; console.log(MySQL connected...); }); module.exports = connection; 3.实现用户注册与登录逻辑(`controllers/authController.js`): 注册用户:接收用户提交的username和`password`,对密码进行哈希处理,然后存储到数据库中

     登录用户:验证用户提交的凭据,如果正确,生成JWT令牌返回给用户

     javascript const bcrypt = require(bcryptjs); const jwt = require(jsonwebtoken); const db = require(../models/db); const{ SECRET_KEY} = process.env; // 确保在.env文件中定义SECRET_KEY exports.registerUser = async(req, res) =>{ const{ username, password} = req.body; try{ const hashedPassword = await bcrypt.hash(password,10); const【rows】 = await db.execute(INSERT INTO users(username, password) VALUES(?, ?),【username, hashedPassword】); res.status(201).send({ message: User registered successfully, userId: rows.insertId}); } catch(err){ if(err.code === ER_DUP_ENTRY){ return res.status(400).send({ message: Username already exists}); } res.status(500).send({ message: Internal server error}); } }; exports.loginUser = async(req, res) =>{ const{ username, password} = req.body; try{ const【rows】 = await db.execute(SELECT - FROM users WHERE username = ?,【username】); if(rows.length ===0){ return res.status(400).send({ message: Invalid credentials}); } const user = rows【0】; const isMatch = await bcrypt.compare(password, user.password); if(!isMatch){ return res.status(400).send({ message: Invalid credentials}); } const payload ={ userId: user.id}; const token = jwt.sign(payload, SECRET_KEY,{ expiresIn: 1h}); res.status(200).send({ message: Login successful, token}); } catch(err){ res.status(500).send({ message: Internal server error}); } }; 4.定义路由(`routes/

MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道