使用 Express 和 MySQL 实现一个登录接口涉及几个步骤,包括设置 Express 服务器、连接 MySQL 数据库、创建用户表(如果还没有)、编写登录接口的逻辑等。以下是一个简单的实现示例:
1. 设置项目
首先,创建一个新的项目文件夹并初始化一个新的 Node.js 项目:
mkdir login-api
cd login-api
npm init -y
2. 安装依赖
安装 Express 和 MySQL 相关的依赖:
npm install express mysql2 body-parser
3. 创建数据库和用户表
确保你的 MySQL 数据库已经启动,并创建一个数据库(例如 login_db
)和用户表(例如 users
)。
CREATE DATABASE login_db;USE login_db;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL -- 注意:实际项目中应使用哈希密码
);
4. 编写服务器代码
在项目文件夹中创建一个 server.js
文件,并添加以下代码:
const express = require('express');
const mysql = require('mysql2');
const bodyParser = require('body-parser');const app = express();
const port = 3000;// 配置 MySQL 连接
const db = mysql.createConnection({host: 'localhost',user: 'root', // 根据实际情况修改password: 'your_password', // 根据实际情况修改database: 'login_db'
});// 连接到数据库
db.connect((err) => {if (err) {throw err;}console.log('MySQL connected...');
});// 使用 body-parser 中间件解析 JSON 请求体
app.use(bodyParser.json());// 登录接口
app.post('/login', (req, res) => {const { username, password } = req.body;if (!username || !password) {return res.status(400).json({ message: 'Username and password are required' });}const query = 'SELECT * FROM users WHERE username = ?';db.query(query, [username], (err, results) => {if (err) {return res.status(500).json({ message: 'Internal server error' });}if (results.length === 0) {return res.status(401).json({ message: 'Invalid username or password' });}const user = results[0];// 注意:实际项目中应验证哈希密码if (user.password === password) {return res.status(200).json({ message: 'Login successful', user: { username: user.username } });} else {return res.status(401).json({ message: 'Invalid username or password' });}});
});app.listen(port, () => {console.log(`Server is running on http://localhost:${port}`);
});
5. 启动服务器
在终端中运行以下命令启动服务器:
node server.js
6. 测试登录接口
你可以使用 Postman 或其他 API 测试工具来测试登录接口。发送一个 POST 请求到 http://localhost:3000/login
,并在请求体中包含 JSON 格式的用户名和密码:
{"username": "your_username","password": "your_password"
}
注意事项
- 密码存储:在实际项目中,不要以明文形式存储密码。应使用密码哈希(如 bcrypt)来存储和验证密码。
- 错误处理:应添加更多的错误处理逻辑,以确保代码的健壮性。
- SQL 注入:虽然此示例中使用了参数化查询来防止 SQL 注入,但在实际项目中应保持警惕,避免使用拼接字符串的方式来构建 SQL 查询。
希望这个示例能帮助你实现一个简单的登录接口!