使用Couchbase Ottoman创建实例时抛出TypeError错误求助
解决Ottoman中
TypeError: User is not a constructor错误 问题原因
你的代码存在两个核心问题:
- 数据库连接与启动是异步操作,但你同步执行了模型创建、实例化及保存逻辑,导致Ottoman未完成初始化时,
User模型还未被正确注册为可构造对象。 - 在全局作用域直接创建模型实例,未等待Ottoman完成启动流程,此时模型构造函数尚未就绪。
修正后的代码
将所有依赖数据库初始化的逻辑纳入异步流程,确保Ottoman连接并启动完成后再执行后续操作:
const ottoman = require("ottoman"); async function connect() { try { await ottoman.connect({ connectionString: process.env.DB_CONNECTION_STRING, bucketName: process.env.DB_BUCKET, username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, }); console.log("Database connected."); await ottoman.start(); return true; } catch (error) { console.log("Database not connected due to: ", error.message); return false; } }; async function main() { // 等待数据库连接完成 const isConnected = await connect(); if (!isConnected) return; // 连接完成后再创建模型 const User = ottoman.model("User", { firstName: String, lastName: String, email: String, tagline: String, }); // 创建实例并保存(注意修正字段名:模型定义为tagline,原代码写的是tagLine) const perry = new User({ firstName: "Perry", lastName: "Mason", email: "perry.mason@example.com", tagline: "Who can we get on the case?", }); const tom = new User({ firstName: "Major", lastName: "Tom", email: "major.tom@example.com", tagline: "Send me up a drink", }); await perry.save(); console.log(`success: user ${perry.firstName} added!`); await tom.save(); console.log(`success: user ${tom.firstName} added!`); }; // 执行主逻辑 main();
额外注意点
- 修正了实例中的字段名:模型定义的是
tagline,原代码误写为tagLine,这会导致字段无法正确存入数据库。 - 避免在全局作用域直接调用异步的
connect函数,将其纳入主异步流程,确保所有依赖数据库的操作都在连接完成后执行。
内容的提问来源于stack exchange,提问作者sidhique kerala
相关产品推荐
相关产品推荐

