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

使用Sequelize+SQLite时findOne().get()报错:get不是函数

问题原因及解决方法

核心问题

Sequelize的sync()、create()、findOne()都是异步操作,返回的是Promise对象,而非直接的Model实例。你直接调用.get()时,异步操作还未完成,拿到的是Promise而非数据库记录实例,因此会触发.get is not a function的报错。

解决步骤

  1. 用async/await语法等待所有异步操作完成,确保数据库表同步、数据插入、查询操作按顺序执行。
  2. 等待findOne()的Promise resolve后,再调用.get()方法获取字段值。

修改后的代码

const { Sequelize, DataTypes } = require("sequelize");
const sequelize = new Sequelize({
  dialect: "sqlite",
  storage: "databasetest.sqlite",
  logging: false
});

const Test = sequelize.define("test", {
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  id: {
    type: DataTypes.STRING,
    allowNull: false,
    primaryKey: true
  }
});

// 用async函数包裹所有异步逻辑
async function run() {
  // 等待表同步完成
  await Test.sync({ force: true });
  // 等待数据插入完成
  await Test.create({
    name: "Hid",
    id: "123"
  });
  // 等待查询完成,拿到Model实例
  const result = await Test.findOne({ where: { id: "123" } });
  // 调用get()获取字段值
  console.log(result.get("name"));
  // 也可以直接通过实例属性访问:result.name
}

run();

补充说明

  • 也可以用.then()链式调用处理Promise,但async/await的代码可读性更高。
  • Model实例除了.get()方法,还能直接通过属性访问字段值,比如result.name,效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:33:29