运行nodemon后无法访问localhost的问题求助
问题:Node.js服务启动后立即退出,未监听指定端口
运行nodemon server后,服务未监听指定端口就直接退出,浏览器访问localhost提示无法连接。相关代码如下:
index.js
import app from "./server.js" import mongodb from "mongodb" import dotenv from "dotenv" dotenv.config() const MongoClient= mongodb.MongoClient const port = process.env.PORT || 8000 MongoClient.connect( process.env.RESTREVIEWS_DB_URI, { poolSize: 50, wtimeout: 2500, useNewUrlParse: true } ) .catch(err => { console.error(err.stack) process.exit(1) }) .then(async client => { app.listen(port, () => { console.log(`listening on port ${port}`) }) })
restaurants.route.js
import express from "express" const router = express.Router() router.route("/").get((req, res) => res.send("Hello, world")) export default router
server.js
import express from "express" import cors from "cors" import restaurants from "./api/restaurants.route.js" const app = express() app.use(cors()) app.use(express.json()) app.use("/api/v1/restaurants", restaurants) app.use("*", (req, res) => res.status(404).json({ error: "not found"})) export default app
原因分析及解决办法
1. 启动命令指向错误文件
你执行的是nodemon server,但实际入口文件是index.js——server.js仅导出了Express实例,没有包含MongoDB连接和端口监听的启动逻辑,直接运行它会导致进程执行完代码后直接退出。
解决:
- 改为运行
nodemon index.js; - 或在
package.json中配置启动脚本:
之后执行"scripts": { "dev": "nodemon index.js", "start": "node index.js" }npm run dev启动开发服务。
2. MongoDB连接失败(核心原因)
服务的端口监听逻辑写在MongoDB连接成功的.then()回调中,如果MongoDB连接失败,catch块会直接调用process.exit(1)终止进程,导致服务从未启动监听。
排查与解决:
- 检查
.env文件中的RESTREVIEWS_DB_URI是否正确(比如本地MongoDB应为mongodb://localhost:27017/你的数据库名,云数据库需确认地址、账号密码无误); - 确认本地MongoDB服务已启动,或云MongoDB实例可正常访问;
- 增强错误提示,在
catch块中明确标注错误类型:
运行.catch(err => { console.error("MongoDB连接失败:", err.stack) process.exit(1) })node index.js查看具体错误信息。
3. 端口监听未处理错误
即使MongoDB连接成功,若指定端口被占用,app.listen()会抛出错误但未被捕获,也可能导致进程退出。
解决:
给app.listen()添加错误监听:
app.listen(port, () => { console.log(`listening on port ${port}`) }).on('error', (err) => { console.error("端口监听失败:", err.message) })
4. 依赖版本兼容性
如果依赖包版本与教程差异较大,可能存在API变更,但当前代码逻辑在mongodb v4+、express v4+环境下是兼容的。若怀疑版本问题:
- 删除
node_modules和package-lock.json,重新执行npm install; - 检查
package.json中依赖版本,确保mongodb、express、cors、dotenv均为稳定版。
内容的提问来源于stack exchange,提问作者JCohrs
相关产品推荐
相关产品推荐

