面试题答案
一键面试整体架构思路
- 数据库连接:使用合适的MySQL连接库(如
mysql2
)在应用程序启动时建立与MySQL数据库的连接。 - API Routes:利用Next.js的API Routes功能,为每个用户管理操作创建对应的路由处理函数。这些函数将负责接收HTTP请求,处理业务逻辑,并与数据库进行交互。
- 请求处理:
- 创建用户(POST):从请求体中提取用户数据,验证数据格式,然后将数据插入到MySQL数据库中。
- 获取单个用户(GET):从请求参数中获取用户ID,查询数据库获取对应用户信息。
- 更新用户(PUT):从请求体中提取更新数据和用户ID,验证数据,然后更新数据库中对应ID的用户记录。
- 删除用户(DELETE):从请求参数中获取用户ID,从数据库中删除对应ID的用户记录。
关键代码片段
- 数据库连接(可以放在
lib/db.js
)
import mysql from'mysql2';
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
export const query = (sql, values) => {
return new Promise((resolve, reject) => {
pool.query(sql, values, (error, results, fields) => {
if (error) {
return reject(error);
}
resolve({ results, fields });
});
});
};
- 创建用户(
pages/api/users/create.js
)
import { query } from '../../../lib/db';
export default async function handler(req, res) {
if (req.method!== 'POST') {
return res.status(405).json({ message: 'Method Not Allowed' });
}
const { name, email } = req.body;
const sql = 'INSERT INTO users (name, email) VALUES (?,?)';
try {
const result = await query(sql, [name, email]);
res.status(201).json({ message: 'User created successfully', id: result.results.insertId });
} catch (error) {
res.status(500).json({ message: 'Error creating user', error });
}
}
- 获取单个用户(
pages/api/users/[id].js
)
import { query } from '../../../lib/db';
export default async function handler(req, res) {
const { id } = req.query;
if (req.method === 'GET') {
const sql = 'SELECT * FROM users WHERE id =?';
try {
const result = await query(sql, [id]);
if (result.results.length === 0) {
return res.status(404).json({ message: 'User not found' });
}
res.status(200).json(result.results[0]);
} catch (error) {
res.status(500).json({ message: 'Error fetching user', error });
}
} else {
res.status(405).json({ message: 'Method Not Allowed' });
}
}
- 更新用户(
pages/api/users/update.js
)
import { query } from '../../../lib/db';
export default async function handler(req, res) {
if (req.method!== 'PUT') {
return res.status(405).json({ message: 'Method Not Allowed' });
}
const { id, name, email } = req.body;
const sql = 'UPDATE users SET name =?, email =? WHERE id =?';
try {
const result = await query(sql, [name, email, id]);
if (result.results.affectedRows === 0) {
return res.status(404).json({ message: 'User not found' });
}
res.status(200).json({ message: 'User updated successfully' });
} catch (error) {
res.status(500).json({ message: 'Error updating user', error });
}
}
- 删除用户(
pages/api/users/delete/[id].js
)
import { query } from '../../../lib/db';
export default async function handler(req, res) {
const { id } = req.query;
if (req.method === 'DELETE') {
const sql = 'DELETE FROM users WHERE id =?';
try {
const result = await query(sql, [id]);
if (result.results.affectedRows === 0) {
return res.status(404).json({ message: 'User not found' });
}
res.status(200).json({ message: 'User deleted successfully' });
} catch (error) {
res.status(500).json({ message: 'Error deleting user', error });
}
} else {
res.status(405).json({ message: 'Method Not Allowed' });
}
}
假设数据库中有一个users
表,表结构如下:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
);