Mongoose连接MongoDB失败及infos.find()超时问题求助
解决方案:Express连接MongoDB超时问题修复
你的问题核心是MongoDB连接失败,且数据库未建立连接时就执行了查询操作,导致超时错误。同时代码里还有几处细节问题需要修正,以下是具体修复步骤:
1. 先确认MongoDB本地服务正在运行
- Windows:打开服务管理器,找到MongoDB服务并启动;或在命令行执行
net start MongoDB - macOS/Linux:通过包管理器启动,比如Homebrew用户执行
brew services start mongodb-community,或对应系统的服务启动命令
2. 修正连接错误处理,排查失败原因
把原有的catch块修改为打印具体错误信息,这样能明确连接失败的根源(比如端口错误、服务未启动、权限问题等):
mongoose.connect("mongodb://127.0.0.1:27017/footballinfo") .then(()=>{ console.log("Mongoose server has started") // 连接成功后再启动Express服务器 app.listen(3000, () => { console.log("server is running on port 3000") }) }) .catch(err => { console.log("Unsuccessful", err) })
3. 必须等数据库连接成功后再启动服务
原代码在数据库未连接时就启动了服务器,导致请求进来时数据库操作超时。把app.listen放在mongoose连接成功的then回调里,确保只有连接就绪后才处理请求。
4. 修复路由变量错误
路由中定义了const infos = await Info.find(),但渲染时传的是未定义的news,需改为infos,同时给异步操作加try/catch避免服务器崩溃:
app.get("/", async (req, res) => { try { const infos = await Info.find() res.render("index.ejs", {title:"Home", infos}) } catch(err) { console.log(err) res.status(500).send("Server error") } })
5. 修正EJS视图引擎配置
原代码的app.set("views engine", "ejs")存在拼写错误,正确配置项是view engine:
app.set("view engine", "ejs")
6. 可选:添加兼容性连接选项(针对Mongoose 6+)
如果使用新版本Mongoose,可显式添加选项确保连接兼容性:
mongoose.connect("mongodb://127.0.0.1:27017/footballinfo", { useNewUrlParser: true, useUnifiedTopology: true })
内容的提问来源于stack exchange,提问作者Francis
相关产品推荐
相关产品推荐

