v0.1.0
This commit is contained in:
92
models/User.js
Normal file
92
models/User.js
Normal file
@ -0,0 +1,92 @@
|
||||
const pool = require('../config/database');
|
||||
const bcrypt = require('bcryptjs');
|
||||
|
||||
class User {
|
||||
// 创建用户表
|
||||
static async createTable() {
|
||||
const query = `
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
email VARCHAR(100) UNIQUE NOT NULL,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
`;
|
||||
|
||||
try {
|
||||
await pool.query(query);
|
||||
console.log('用户表创建成功');
|
||||
} catch (error) {
|
||||
console.error('创建用户表失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 根据用户名查找用户
|
||||
static async findByUsername(username) {
|
||||
const query = 'SELECT * FROM users WHERE username = $1';
|
||||
try {
|
||||
const result = await pool.query(query, [username]);
|
||||
return result.rows[0];
|
||||
} catch (error) {
|
||||
console.error('查找用户失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 根据邮箱查找用户
|
||||
static async findByEmail(email) {
|
||||
const query = 'SELECT * FROM users WHERE email = $1';
|
||||
try {
|
||||
const result = await pool.query(query, [email]);
|
||||
return result.rows[0];
|
||||
} catch (error) {
|
||||
console.error('查找用户失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 创建新用户
|
||||
static async create(userData) {
|
||||
const { username, email, password } = userData;
|
||||
|
||||
// 加密密码
|
||||
const saltRounds = 10;
|
||||
const hashedPassword = await bcrypt.hash(password, saltRounds);
|
||||
|
||||
const query = `
|
||||
INSERT INTO users (username, email, password)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING id, username, email, created_at
|
||||
`;
|
||||
|
||||
try {
|
||||
const result = await pool.query(query, [username, email, hashedPassword]);
|
||||
return result.rows[0];
|
||||
} catch (error) {
|
||||
console.error('创建用户失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 验证密码
|
||||
static async verifyPassword(password, hashedPassword) {
|
||||
return await bcrypt.compare(password, hashedPassword);
|
||||
}
|
||||
|
||||
// 获取所有用户(仅用于测试)
|
||||
static async findAll() {
|
||||
const query = 'SELECT id, username, email, created_at FROM users';
|
||||
try {
|
||||
const result = await pool.query(query);
|
||||
return result.rows;
|
||||
} catch (error) {
|
||||
console.error('获取用户列表失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = User;
|
Reference in New Issue
Block a user