使用Mongoose连接MongoDB时遇TypeError: mongoose.connection不是函数
解决Mongoose连接MongoDB时的TypeError: mongoose.connection is not a function错误
核心错误原因
mongoose.connection是一个属性对象(代表当前数据库连接实例),并非可调用的函数。你在index.js里错误地给它加了括号调用:mongoose.connection(),这直接导致了TypeError。
完整修复步骤
1. 修正index.js中的连接实例获取代码
把:
const conn = mongoose.connection();
改为:
const conn = mongoose.connection;
2. 修复db.js中的多个潜在问题
你的db.js里还有几个会导致连接失败或报错的问题:
mongoose.connect是异步操作,try/catch无法直接捕获其错误(因为没有等待异步完成)- 代码中未定义
res,直接调用res.send(error)会触发新的错误 - 配置参数
useUnifiedToplogy拼写错误,正确拼写是useUnifiedTopology
修正后的db.js代码(.then/.catch版本):
const mongoose = require("mongoose"); const dotenv = require("dotenv"); dotenv.config(); module.exports = function connection() { const connectionParams = { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }; mongoose.connect(process.env.DB, connectionParams) .then(() => { console.log("数据库连接成功"); }) .catch((error) => { console.error("数据库连接失败:", error); }); };
如果偏好async/await写法,db.js可改为:
const mongoose = require("mongoose"); const dotenv = require("dotenv"); dotenv.config(); module.exports = async function connection() { try { const connectionParams = { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }; await mongoose.connect(process.env.DB, connectionParams); console.log("数据库连接成功"); } catch (error) { console.error("数据库连接失败:", error); } };
对应index.js需要用异步函数包裹调用:
const mongoose = require("mongoose"); const connection = require("./DB/db"); (async () => { await connection(); const conn = mongoose.connection; })();
额外说明
可以通过监听连接事件确认状态:
const conn = mongoose.connection; conn.on("connected", () => console.log("已连接到数据库")); conn.on("disconnected", () => console.log("数据库连接已断开")); conn.on("error", (err) => console.error("连接出错:", err));
内容的提问来源于stack exchange,提问作者Talc
相关产品推荐
相关产品推荐

