nodejs用mysql数据库写登陆页面

2025-04-14 18

nodejs用mysql数据库写登陆页面

在开发基于Node.js的Web应用程序时,使用MySQL作为后端数据库来实现用户登录功能是一种常见的需求。如何通过Node.js和MySQL数据库构建一个简单的登录页面,并提供多种解决方案。

解决方案:
1. 使用Express框架搭建服务器。
2. 通过MySQL数据库存储用户信息。
3. 实现用户登录验证逻辑。
4. 提供HTML表单用于用户输入用户名和密码。
5. 处理用户提交的数据并验证其合法性。

接下来,我们将每一步的实现过程。


1. 环境准备

在开始之前,请确保已安装以下工具:
- Node.js
- MySQL
- npm(Node.js包管理器)

初始化项目并安装必要的依赖项:

bash
mkdir login-app
cd login-app
npm init -y
npm install express mysql2 body-parser ejs

解释:
- express:轻量级的Web框架。
- mysql2:与MySQL交互的Node.js模块。
- body-parser:解析HTTP请求体。
- ejs:模板引擎,用于渲染HTML页面。


2. 创建MySQL数据库和表

创建一个名为users的数据库,并在其中创建一个名为user_credentials的表,用于存储用户信息。

sql
CREATE DATABASE users;
USE users;</p>

<p>CREATE TABLE user<em>credentials (
    id INT AUTO</em>INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);</p>

<p>INSERT INTO user_credentials (username, password) VALUES ('testuser', 'password123');

注意:为了安全性,建议对密码进行加密存储。可以使用bcrypt库对密码进行哈希处理。


3. 编写Node.js代码

3.1 初始化Express应用

创建一个名为app.js的文件,并编写以下代码:

javascript
const express = require('express');
const mysql = require('mysql2');
const bodyParser = require('body-parser');
const app = express();</p>

<p>// 配置中间件
app.use(bodyParser.urlencoded({ extended: true }));
app.set('view engine', 'ejs');</p>

<p>// 连接MySQL数据库
const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'your_password', // 替换为你的MySQL密码
    database: 'users'
});</p>

<p>db.connect((err) => {
    if (err) throw err;
    console.log('Connected to the MySQL database.');
});</p>

<p>// 登录页面路由
app.get('/', (req, res) => {
    res.render('login');
});</p>

<p>// 处理登录请求
app.post('/login', (req, res) => {
    const { username, password } = req.body;</p>

<pre><code>// 查询数据库以验证用户
const query = 'SELECT * FROM user_credentials WHERE username = ? AND password = ?';
db.query(query, [username, password], (err, results) => {
    if (err) throw err;

    if (results.length > 0) {
        res.send('Login successful!');
    } else {
        res.send('Invalid username or password.');
    }
});

});

// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
console.log(Server is running on port ${PORT});
});

3.2 创建登录页面

在项目的根目录下创建一个名为views的文件夹,并在其中创建一个名为login.ejs的文件:

html
</p>



    
    
    <title>Login Page</title>


    <h2>Login</h2>
    
        <label for="username">Username:</label>
        <br><br>

        <label for="password">Password:</label>
        <br><br>

        <button type="submit">Login</button>
    



<p>

4. 安全性改进方案

上述代码虽然实现了基本的登录功能,但存在安全隐患,例如明文存储密码和SQL注入风险。以下是两种改进方法:

4.1 使用bcrypt加密密码

安装bcrypt库:

bash
npm install bcrypt

修改密码存储和验证逻辑:

javascript
const bcrypt = require('bcrypt');</p>

<p>// 插入新用户时加密密码
const hashPassword = async (plainPassword) => {
    const saltRounds = 10;
    return await bcrypt.hash(plainPassword, saltRounds);
};</p>

<p>// 验证密码时比对哈希值
const comparePassword = async (plainPassword, hashedPassword) => {
    return await bcrypt.compare(plainPassword, hashedPassword);
};

在插入用户数据时调用hashPassword,在验证用户时调用comparePassword

4.2 防止SQL注入

使用参数化查询或ORM工具(如Sequelize)可以有效防止SQL注入。例如:

javascript
const query = 'SELECT * FROM user_credentials WHERE username = ? AND password = ?';
db.query(query, [username, password], (err, results) => {
if (err) throw err;
// 处理结果
});


5.

详细如何使用Node.js和MySQL数据库实现一个简单的登录页面。我们从环境准备、数据库设计、代码实现到安全性改进等多个方面进行了讲解。希望这些内容能帮助你更好地理解和实践Node.js与MySQL的结合使用。

如果你有更多需求,比如注册功能、会话管理等,可以在此基础上进一步扩展。

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载