Node.js登录验证MySQL
在Web开发中,用户登录验证是一个非常常见的功能。而MySQL是一种广泛使用的关系型数据库,它可以用来存储用户的登录信息。本文将介绍如何使用Node.js来进行用户登录验证,并且将用户信息存储在MySQL数据库中。
准备工作
在开始之前,我们需要安装一些必要的软件和包。首先,确保你已经安装了Node.js和MySQL。如果还没有安装,可以从官方网站下载安装包进行安装。
另外,我们还需要安装一些Node.js的依赖包。打开命令行,进入项目目录,并执行以下命令:
npm init -y
npm install express mysql express-session bcrypt
上述命令将会初始化一个新的Node.js项目,并且安装了Express框架、MySQL驱动、会话管理模块和密码加密模块。
创建数据库
首先,我们需要在MySQL中创建一个用于存储用户登录信息的表。打开MySQL控制台,连接到你的数据库,并执行以下SQL语句:
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL
);
上述SQL语句将会创建一个名为mydb
的数据库,并在其中创建一个名为users
的表,该表包含id
、username
和password
三个字段。id
字段将自动递增生成,username
和password
字段用于存储用户的登录信息。
编写代码
接下来,我们将编写Node.js代码实现用户登录验证的功能。在项目根目录下创建一个名为app.js
的文件,并在其中添加以下代码:
const express = require('express');
const mysql = require('mysql');
const session = require('express-session');
const bcrypt = require('bcrypt');
const app = express();
// 配置MySQL连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb',
connectionLimit: 10
});
// 配置Express会话
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true
}));
// 配置路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.get('/login', (req, res) => {
res.send(`
<form action="/login" method="post">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<button type="submit">Login</button>
</form>
`);
});
app.post('/login', (req, res) => {
const { username, password } = req.body;
// 查询数据库中是否存在该用户
pool.query('SELECT * FROM users WHERE username = ?', [username], (error, results) => {
if (error) {
throw error;
}
// 检查密码是否匹配
if (results.length > 0 && bcrypt.compareSync(password, results[0].password)) {
req.session.loggedin = true;
req.session.username = username;
res.redirect('/profile');
} else {
res.send('Incorrect username or password');
}
});
});
app.get('/profile', (req, res) => {
if (req.session.loggedin) {
res.send(`Welcome back, ${req.session.username}!`);
} else {
res.redirect('/login');
}
});
// 启动服务器
app.listen(3000, () => {
console.log('Server started on port 3000');
});
上述代码使用了Express框架来搭建Web服务器,并使用了MySQL驱动来连接和操作MySQL数据库。在/login
路由中,我们返回一个包含用户名和密码输入框的表单,用于用户输入登录信息。当用户提交表单后,我们将会查询数据库中是否存在该用户,并且检查密码是否匹配。如果验证通过,将会在会话中设置loggedin
和username
属性,并且重定向到/profile
路由。在/profile
路由中,我们会检查用户是否已经登录,如果已经登录,则返回欢迎页面,否则将会重定向到登录页面。
运行代码
在命令行中执行以下命令,启动服务器:
node app.js