mongoose连接MongoDB报reading 'host' of undefined错误
问题描述
连接MongoDB数据库时持续抛出TypeError: Cannot read properties of undefined (reading 'host')错误,错误定位到db.js文件第11行,项目相关代码如下:
Index.js 代码
const express = require("express"); const dotenv = require("dotenv"); const connectDB = require("./config/db"); //Load config dotenv.config({ path: "./config/config.env" }); console.log("hello"); connectDB(); const app = express(); const PORT = process.env.PORT || 3000; app.listen( PORT, console.log(`server running in ${process.env.NODE_ENV} mode on port ${PORT}`) );
db.js 代码(报错行位于第11行)
const mongoose = require("mongoose"); const connectDB = async () => { try { const conn = mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, // useFindAndModify: false, }); console.log("hey!"); console.log(`MongoDB connecteed: ${conn.connection.host}`); } catch (err) { console.error(err); process.exit(1); } }; module.exports = connectDB;
问题根因
- 核心代码疏漏:
mongoose.connect()是异步方法,返回Promise对象,现有代码调用时未加await关键字等待连接完成,变量conn拿到的是未resolve的Promise实例,不存在connection属性,访问conn.connection.host时会读取undefined值的host属性,直接触发类型错误。 - 潜在配置问题:需确认
./config/config.env文件中存在格式正确的MONGO_URI配置项,若dotenv未正确加载该环境变量,即使修复代码逻辑也会因无效连接地址抛出连接失败错误。
修复方案
修改db.js中mongoose.connect的调用逻辑,补充await关键字,修正后的db.js代码如下:
const mongoose = require("mongoose"); const connectDB = async () => { try { const conn = await mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, // useFindAndModify: false, }); console.log("hey!"); console.log(`MongoDB connected: ${conn.connection.host}`); } catch (err) { console.error(err); process.exit(1); } }; module.exports = connectDB;
修复后可先在connectDB方法内打印process.env.MONGO_URI确认环境变量加载正常,再启动服务验证连接状态。
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

