You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
5.0 KiB
175 lines
5.0 KiB
// 直接连接数据库检查productQuantity字段的脚本
|
|
const Sequelize = require('sequelize');
|
|
const mysql = require('mysql2/promise');
|
|
|
|
// 数据库连接配置
|
|
const sequelize = new Sequelize(
|
|
'minishop', // 数据库名
|
|
'root', // 用户名
|
|
'password', // 密码
|
|
{
|
|
host: 'localhost',
|
|
dialect: 'mysql',
|
|
pool: {
|
|
max: 5,
|
|
min: 0,
|
|
acquire: 30000,
|
|
idle: 10000
|
|
},
|
|
timezone: '+08:00' // 设置时区为UTC+8
|
|
}
|
|
);
|
|
|
|
// 定义购物车模型 - 直接复制自server-mysql.js
|
|
class CartItem extends Sequelize.Model {}
|
|
CartItem.init({
|
|
id: {
|
|
type: Sequelize.DataTypes.INTEGER,
|
|
autoIncrement: true,
|
|
primaryKey: true
|
|
},
|
|
userId: {
|
|
type: Sequelize.DataTypes.STRING(100),
|
|
allowNull: false
|
|
},
|
|
productId: {
|
|
type: Sequelize.DataTypes.STRING(100),
|
|
allowNull: false
|
|
},
|
|
productName: {
|
|
type: Sequelize.DataTypes.STRING(255),
|
|
allowNull: false
|
|
},
|
|
specification: {
|
|
type: Sequelize.DataTypes.STRING(255)
|
|
},
|
|
quantity: {
|
|
type: Sequelize.DataTypes.INTEGER,
|
|
allowNull: false,
|
|
defaultValue: 1
|
|
},
|
|
productQuantity: {
|
|
type: Sequelize.DataTypes.INTEGER,
|
|
allowNull: false,
|
|
defaultValue: 0
|
|
},
|
|
grossWeight: {
|
|
type: Sequelize.DataTypes.DECIMAL(10, 2)
|
|
},
|
|
yolk: {
|
|
type: Sequelize.DataTypes.STRING(100)
|
|
},
|
|
price: {
|
|
type: Sequelize.DataTypes.DECIMAL(10, 2)
|
|
},
|
|
selected: {
|
|
type: Sequelize.DataTypes.BOOLEAN,
|
|
defaultValue: true
|
|
},
|
|
added_at: {
|
|
type: Sequelize.DataTypes.DATE,
|
|
defaultValue: Sequelize.NOW
|
|
}
|
|
}, {
|
|
sequelize,
|
|
modelName: 'CartItem',
|
|
tableName: 'cart_items',
|
|
timestamps: false
|
|
});
|
|
|
|
// 检查数据库结构
|
|
async function checkDatabaseStructure() {
|
|
console.log('开始直接检查数据库中的productQuantity字段...');
|
|
|
|
try {
|
|
// 检查连接
|
|
await sequelize.authenticate();
|
|
console.log('✅ 数据库连接成功');
|
|
|
|
// 1. 使用原始查询检查表结构
|
|
console.log('\n1. 检查cart_items表结构...');
|
|
const [fields, _] = await sequelize.query('DESCRIBE cart_items');
|
|
|
|
// 查找productQuantity字段
|
|
const productQuantityField = fields.find(field => field.Field === 'productQuantity');
|
|
|
|
if (productQuantityField) {
|
|
console.log('✅ 数据库中存在productQuantity字段:');
|
|
console.log(` - 类型: ${productQuantityField.Type}`);
|
|
console.log(` - 是否允许NULL: ${productQuantityField.Null === 'YES' ? '是' : '否'}`);
|
|
console.log(` - 默认值: ${productQuantityField.Default || '无'}`);
|
|
} else {
|
|
console.error('❌ 数据库中不存在productQuantity字段!');
|
|
console.log('cart_items表中的所有字段:', fields.map(field => field.Field).join(', '));
|
|
|
|
// 如果不存在,尝试添加这个字段
|
|
console.log('\n尝试添加productQuantity字段到cart_items表...');
|
|
try {
|
|
await sequelize.query('ALTER TABLE cart_items ADD COLUMN productQuantity INT NOT NULL DEFAULT 0');
|
|
console.log('✅ 成功添加productQuantity字段');
|
|
} catch (addError) {
|
|
console.error('❌ 添加字段失败:', addError.message);
|
|
}
|
|
}
|
|
|
|
// 2. 检查test_user_id的购物车数据
|
|
console.log('\n2. 检查测试用户的购物车数据...');
|
|
const cartItems = await CartItem.findAll({
|
|
where: {
|
|
userId: 'test_user_id'
|
|
},
|
|
// 明确指定返回所有字段
|
|
attributes: {
|
|
exclude: [] // 不排除任何字段
|
|
}
|
|
});
|
|
|
|
console.log(`找到 ${cartItems.length} 条购物车记录`);
|
|
|
|
if (cartItems.length > 0) {
|
|
// 显示第一条记录的所有字段
|
|
console.log('\n第一条购物车记录的所有字段:');
|
|
const firstItem = cartItems[0].toJSON();
|
|
Object.keys(firstItem).forEach(key => {
|
|
console.log(` - ${key}: ${firstItem[key]}`);
|
|
});
|
|
|
|
// 特别检查productQuantity字段
|
|
console.log('\nproductQuantity字段在数据中的状态:');
|
|
cartItems.forEach((item, index) => {
|
|
const data = item.toJSON();
|
|
console.log(` 记录 ${index + 1}: productQuantity = ${data.productQuantity !== undefined ? data.productQuantity : 'undefined'}`);
|
|
});
|
|
}
|
|
|
|
// 3. 尝试直接插入一条带productQuantity的记录
|
|
console.log('\n3. 尝试直接插入一条带productQuantity的记录...');
|
|
const testProductId = 'db_test_' + Date.now();
|
|
const newItem = await CartItem.create({
|
|
userId: 'test_user_id',
|
|
productId: testProductId,
|
|
productName: '数据库测试商品',
|
|
specification: '测试规格',
|
|
quantity: 2,
|
|
productQuantity: 10,
|
|
grossWeight: 1000,
|
|
yolk: '测试蛋黄',
|
|
price: 50,
|
|
selected: true,
|
|
added_at: new Date()
|
|
});
|
|
|
|
console.log('✅ 成功插入记录');
|
|
console.log('插入的记录详情:', newItem.toJSON());
|
|
|
|
} catch (error) {
|
|
console.error('检查过程中发生错误:', error.message);
|
|
} finally {
|
|
// 关闭连接
|
|
await sequelize.close();
|
|
console.log('\n数据库连接已关闭');
|
|
}
|
|
}
|
|
|
|
// 执行检查
|
|
checkDatabaseStructure();
|