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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:34:57