更新数据库配置为niumall,添加用户登出功能并集成axios

This commit is contained in:
2025-09-18 17:13:28 +08:00
parent c30c99e086
commit 8637c05970
7 changed files with 515 additions and 3 deletions

View File

@@ -3,7 +3,7 @@ DB_HOST=129.211.213.226
DB_PORT=9527
DB_USERNAME=root
DB_PASSWORD=aiotAiot123!
DB_NAME=jiebandata
DB_NAME=niumall
# JWT配置
JWT_SECRET=niumall_jwt_secret_key_2024

135
backend/init_database.js Normal file
View File

@@ -0,0 +1,135 @@
const { sequelize } = require('./models');
const { ApiUser, Order } = require('./models');
const bcrypt = require('bcryptjs');
// 演示账号数据
const demoUsers = [
{
username: 'admin',
password: 'admin123',
phone: '13800138001',
email: 'admin@niumall.com',
user_type: 'admin',
status: 'active'
},
{
username: 'buyer',
password: 'buyer123',
phone: '13800138002',
email: 'buyer@niumall.com',
user_type: 'client',
status: 'active'
},
{
username: 'trader',
password: 'trader123',
phone: '13800138003',
email: 'trader@niumall.com',
user_type: 'supplier',
status: 'active'
}
];
// 演示订单数据
const demoOrders = [
{
orderNo: 'ORD20240520001',
buyerId: 2, // buyer用户
buyerName: '采购商',
supplierId: 3, // trader用户
supplierName: '供应商',
traderId: null,
traderName: null,
cattleBreed: '西门塔尔牛',
cattleCount: 10,
expectedWeight: 5000.00,
actualWeight: null,
unitPrice: 35.00,
totalAmount: 175000.00,
paidAmount: 50000.00,
remainingAmount: 125000.00,
status: 'pending',
deliveryAddress: '北京市朝阳区某某路123号',
expectedDeliveryDate: new Date('2024-06-01'),
actualDeliveryDate: null,
notes: '请按时交货,质量要保证'
},
{
orderNo: 'ORD20240520002',
buyerId: 2, // buyer用户
buyerName: '采购商',
supplierId: 3, // trader用户
supplierName: '供应商',
traderId: null,
traderName: null,
cattleBreed: '夏洛来牛',
cattleCount: 5,
expectedWeight: 2500.00,
actualWeight: null,
unitPrice: 38.00,
totalAmount: 95000.00,
paidAmount: 95000.00,
remainingAmount: 0.00,
status: 'confirmed',
deliveryAddress: '北京市海淀区某某路456号',
expectedDeliveryDate: new Date('2024-05-28'),
actualDeliveryDate: null,
notes: '加急订单'
}
];
// 初始化数据库
const initDatabase = async () => {
try {
console.log('开始初始化数据库...');
// 测试数据库连接
await sequelize.authenticate();
console.log('✅ 数据库连接成功');
// 删除并重新创建表结构
console.log('正在创建表结构...');
await sequelize.sync({ force: true });
console.log('✅ 表结构创建完成');
// 添加演示用户
console.log('正在添加演示用户...');
for (const userData of demoUsers) {
// 加密密码
const salt = await bcrypt.genSalt(10);
const passwordHash = await bcrypt.hash(userData.password, salt);
try {
await ApiUser.create({
...userData,
password_hash: passwordHash
});
console.log(`✅ 成功创建用户: ${userData.username} (${userData.user_type})`);
} catch (error) {
console.error(`❌ 创建用户 ${userData.username} 时出错:`, error.message);
}
}
// 添加演示订单
console.log('正在添加演示订单...');
for (const orderData of demoOrders) {
try {
await Order.create(orderData);
console.log(`✅ 成功创建订单: ${orderData.orderNo}`);
} catch (error) {
console.error(`❌ 创建订单 ${orderData.orderNo} 时出错:`, error.message);
}
}
console.log('✅ 数据库初始化完成');
} catch (error) {
console.error('❌ 数据库初始化失败:', error.message);
console.error(error);
} finally {
// 关闭数据库连接
await sequelize.close();
}
};
// 执行初始化
initDatabase();

View File

@@ -39,6 +39,7 @@ const jwt = require('jsonwebtoken')
* example: 权限不足
*/
const jwt = require('jsonwebtoken')
// 从环境变量或配置中获取JWT密钥
const JWT_SECRET = process.env.JWT_SECRET || 'your_jwt_secret_key'

View File

@@ -12,4 +12,23 @@ router.post('/mini-program/login', AuthController.miniProgramLogin);
// 获取当前用户信息
router.get('/current', authenticate, AuthController.getCurrentUser);
// 用户登出
router.post('/logout', authenticate, async (req, res) => {
try {
// JWT是无状态的服务器端无法直接使token失效
// 登出操作主要由客户端完成如删除本地存储的token
// 这里只返回成功信息
res.json({
success: true,
message: '登出成功'
});
} catch (error) {
console.error('用户登出失败:', error);
res.status(500).json({
success: false,
message: '登出失败,请稍后再试'
});
}
});
module.exports = router;