使用Sequelize+SQLite时findOne().get()报错:get不是函数
问题原因及解决方法
核心问题
Sequelize的sync()、create()、findOne()都是异步操作,返回的是Promise对象,而非直接的Model实例。你直接调用.get()时,异步操作还未完成,拿到的是Promise而非数据库记录实例,因此会触发.get is not a function的报错。
解决步骤
- 用
async/await语法等待所有异步操作完成,确保数据库表同步、数据插入、查询操作按顺序执行。 - 等待
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
相关产品推荐
相关产品推荐

