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的结合使用。
如果你有更多需求,比如注册功能、会话管理等,可以在此基础上进一步扩展。