Node Sequelize操作MySQL:如何获取含布尔值的原始数据数组
解决Sequelize raw查询布尔字段返回Buffer的问题
方案1:修改模型字段的类型转换逻辑
在定义actif字段时,通过自定义get方法确保读取值时转换为布尔类型:
const YourModel = sequelize.define('YourModel', { actif: { type: DataTypes.BOOLEAN, allowNull: false, get() { const rawValue = this.getDataValue('actif'); return rawValue === 1 || rawValue === true; } }, // 其他字段定义 });
方案2:查询后手动映射转换
保持现有模型不变,查询获取原始数据后,遍历数组转换actif字段:
// 执行raw查询 const rawResults = await YourModel.findAll({ raw: true, // 你的查询条件,比如where、attributes等 }); // 转换actif为布尔值 const formattedResults = rawResults.map(item => ({ ...item, actif: item.actif instanceof Buffer ? item.actif[0] === 1 : item.actif === 1 }));
方案3:配置MySQL驱动自动转换
在Sequelize的连接配置中,添加typeCast逻辑,让驱动自动将tinyint(1)类型转换为布尔值:
const sequelize = new Sequelize('your_db', 'your_user', 'your_pwd', { dialect: 'mysql', dialectOptions: { typeCast: (field, next) => { // 检测tinyint(1)类型字段 if (field.type === 'TINY' && field.length === 1) { return field.string() === '1'; } return next(); } }, // 其他连接配置 });
内容的提问来源于stack exchange,提问作者dterencio
相关产品推荐
相关产品推荐

