You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sequelize结合axios获取属性数据及其对应的数据类型?

Sequelize 查询时同步返回字段对应数据类型实现方案

以下是可直接落地的3种实现方案:

方案1:直接从模型定义中提取元数据(性能最优)

Sequelize 所有模型内置 rawAttributes 属性,存储了每个字段的完整定义,包含数据类型信息,不需要额外发起数据库查询。
示例代码:

// 假设你已经定义了User模型,要获取age字段的类型
const fieldType = User.rawAttributes.age.type.key;
// 输出结果示例:INTEGER、STRING、DATE等标准数据类型标识

// 批量获取当前模型所有字段的类型映射
const fieldTypeMap = Object.fromEntries(
  Object.entries(User.rawAttributes).map(([fieldName, config]) => [fieldName, config.type.key])
);

方案2:查询数据时同步附带回字段类型

如果你需要前端通过 axios 请求接口时,同时拿到业务数据和对应字段类型,可以在查询逻辑后做一层数据拼接:

async function getUserWithType(userId) {
  // 第一步查询业务数据
  const user = await User.findByPk(userId);
  const userData = user.toJSON();
  // 第二步生成字段类型映射
  const typeMap = Object.fromEntries(
    Object.entries(User.rawAttributes).map(([field, config]) => [field, config.type.key])
  );
  // 拼接返回结构
  return {
    data: userData,
    fieldTypes: typeMap
  }
}

前端请求该接口后,即可同时拿到字段值和对应的数据类型。

方案3:使用Sequelize钩子自动注入类型(全局复用)

如果需要所有该模型的查询接口都自动附带回字段类型,可以给模型加全局 afterFind 钩子:

User.addHook('afterFind', (result) => {
  const typeMap = Object.fromEntries(
    Object.entries(User.rawAttributes).map(([field, config]) => [field, config.type.key])
  );
  // 兼容单条查询、多条查询两种场景
  if (Array.isArray(result)) {
    result.forEach(item => item.dataValues.fieldTypes = typeMap);
  } else if (result) {
    result.dataValues.fieldTypes = typeMap;
  }
})

注意事项

  • 如果使用自定义数据类型,type.key 可能无法直接识别,可以取 type.toString() 获取完整的类型定义字符串
  • 钩子注入的类型默认会在 toJSON() 后保留,如果你配置了序列化排除字段,需要把 fieldTypes 加入保留字段列表

内容的提问来源于stack exchange,提问作者akshit goel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:27:03