使用mongoose.createConnection()报错:conn1.model is not a function
解决mongoose.createConnection()多连接时TypeError: conn1.model is not a function的问题
核心问题原因
mongoose.createConnection()是异步操作,直接赋值后立即调用conn1.model()时,连接可能还未完成初始化,导致model方法暂时不可用;另外你代码里Schema的uniquie是拼写错误(应为unique),虽不触发当前错误,但会影响后续索引创建功能。
解决方案
方案1:用async/await等待连接就绪
通过asPromise()配合await确保连接完全建立后再创建模型:
const mongoose = require("mongoose"); require("dotenv").config(); async function initConnection() { // 等待连接完成 const conn1 = await mongoose.createConnection(process.env.MONGO_URI).asPromise(); const UserSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true, }, email: { type: String, required: true, unique: true, // 修正拼写错误 lowercase: true, }, }); return conn1.model("users", UserSchema); } // 导出模型(使用时需用await导入) module.exports = initConnection();
方案2:监听连接open事件创建模型
在连接成功打开后再定义模型,确保conn1的方法已就绪:
const mongoose = require("mongoose"); const Schema = mongoose.Schema; require("dotenv").config(); const conn1 = mongoose.createConnection(process.env.MONGO_URI); // 连接成功后执行模型创建 conn1.once("open", () => { const UserSchema = new Schema({ username: { type: String, required: true, unique: true, }, email: { type: String, required: true, unique: true, // 修正拼写错误 lowercase: true, }, }); const User = conn1.model("users", UserSchema); module.exports = User; });
方案3:利用Mongoose的自动缓冲机制(最简)
Mongoose会自动缓冲模型创建请求,直到连接完成,只需修正拼写错误后直接使用:
const mongoose = require("mongoose"); const Schema = mongoose.Schema; require("dotenv").config(); const conn1 = mongoose.createConnection(process.env.MONGO_URI); const UserSchema = new Schema({ username: { type: String, required: true, unique: true, }, email: { type: String, required: true, unique: true, // 修正拼写错误 lowercase: true, }, }); // Mongoose会自动等待连接就绪后执行model创建 module.exports = conn1.model("users", UserSchema);
额外排查点
- 打印
console.log(process.env.MONGO_URI)确认环境变量是否正确加载,避免因URI为空导致连接创建失败 - 确认Mongoose版本为6.x及以上,旧版本可能存在
createConnection返回值的差异
内容的提问来源于stack exchange,提问作者Rich Le
相关产品推荐
相关产品推荐

