Express Node.js服务器无法通过Mongoose连接MongoDB求助
Mongoose连接MongoDB始终触发catch块的排查方案
问题描述
刚接触后端开发,运行以下server.js代码时,始终触发Mongoose连接MongoDB的catch块,输出‘error came’。已确认MongoDB服务器、Express服务器正常运行,Mongoose已正确安装,且使用MongoDB Compass,但始终无法成功建立数据库连接,请求帮助排查问题。
// Step 1 create a folder backend // Step 2 npm init -y // Step 3 open in VS Code // Step 4 npm i express // Step 5 create server.js // Server Instantiate const express = require("express"); const app = express(); // used to parse req.body in express -> PUT or POST const bodyParser = require("body-parser"); // Specifically parse JSON data and add it to the req.body object app.use(bodyParser.json()); // Server started on port 3000 app.listen(3000, () => { console.log("Server started at port no 3000"); }); // A get request for route '/' app.get("/", (req, res) => { res.send("Hello Jee Kaise hai aap"); }); // '/' route sends a response when accessed via GET // This is a GET request -> app.get() app.post("/cars", (req, res) => { const { name, brand } = req.body; console.log(name); console.log(brand); res.send("car submitted successfully"); }); const mongoose = require("mongoose"); mongoose .connect("mongodb://localhost:27017/newDB", { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log("connection successful"); }) .catch((error) => { console.log("error came"); });
排查步骤
1. 先打印具体错误信息
现在的catch块只输出模糊的提示,根本看不到问题根源。先修改代码,把错误详情打出来:
.catch((error) => { console.log("error came:", error); })
运行后就能看到是认证失败、端口不通还是其他具体问题,这是最关键的第一步。
2. 检查连接字符串的正确性
- 确认MongoDB确实在
localhost:27017运行:用netstat -ano | findstr :27017(Windows)或lsof -i :27017(Mac/Linux)查看端口是否被MongoDB进程占用。如果没查到,说明MongoDB服务没启动,先启动服务。 - 试试用
127.0.0.1代替localhost:有些系统的localhost解析可能有问题,改成mongodb://127.0.0.1:27017/newDB再试。 - 如果MongoDB开了权限验证:连接字符串要带上用户名和密码,格式是
mongodb://你的用户名:你的密码@localhost:27017/newDB?authSource=admin。
3. 移除过时的Mongoose配置参数
你用的useNewUrlParser和useUnifiedTopology是Mongoose 6.x版本之前需要的参数,新版Mongoose已经默认启用这些功能,反而可能因为加了这些参数导致兼容性问题。直接去掉这两个选项:
mongoose.connect("mongodb://localhost:27017/newDB") .then(() => { console.log("connection successful"); }) .catch((error) => { console.log("error came:", error); });
4. 用MongoDB Compass验证连接字符串
打开Compass,输入你代码里用的连接字符串mongodb://localhost:27017/newDB,如果Compass也连不上,那就是MongoDB服务本身的问题(比如服务没启动、防火墙拦截);如果Compass能连上,那就是代码或Mongoose的配置问题,回到第一步看具体错误信息。
5. 检查防火墙/安全软件
本地防火墙可能拦截了Node.js访问27017端口,暂时关闭防火墙试试,或者给Node.js添加访问该端口的权限。
6. 手动创建目标数据库
虽然MongoDB会自动创建不存在的数据库,但如果有权限问题可能创建失败。先在Compass里手动创建newDB数据库,再运行代码尝试连接。
内容的提问来源于stack exchange,提问作者Jay Shivare
相关产品推荐
相关产品推荐

