You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:50:00