You need to enable JavaScript to run this app. NGINX环境下用pm2启动Node服务报MODULE_NOT_FOUND无法连接后端求助
优惠活动
大模型
产品
解决方案
定价
更多

NGINX环境下用pm2启动Node服务报MODULE_NOT_FOUND无法连接后端求助

服务器上Node服务触发MODULE_NOT_FOUND的排查与解决方法

首先明确:这个报错和NGINX基本没关系。既然你直接在服务器上跑node server.js都会报同样的MODULE_NOT_FOUND,说明问题出在Node服务本身的加载环节,根本轮不到反向代理出问题,别上来就改NGINX配置浪费时间。

按问题出现概率从高到低排查

  • 没在正确目录下装依赖、启动服务
    绝大多数本地能正常运行、服务器上找不到模块的问题,都是上传项目时漏了node_modules文件夹,或是执行启动命令时进错了目录。
    先进入存放server.js、package.json的项目根目录,执行npm install装全依赖再尝试启动。千万别直接把本地Windows/macOS环境生成的node_modules文件夹拷贝到服务器上,这类依赖包包含对应本地系统的原生二进制编译文件,在Linux环境下无法正常加载,装出的依赖全是无效的。线上环境不需要安装开发依赖时,可执行npm install --production减少冗余文件,不要随意用sudo全局安装项目依赖,避免出现权限错位问题。
  • 文件路径大小写不匹配
    对照报错信息中的requireStack堆栈,定位具体缺失的模块路径。如果是引入项目内自写的本地文件时报错,需要核对所有require()引入的路径和实际服务器上文件、文件夹的大小写:Windows和macOS的文件系统对路径大小写不敏感,哪怕路径中字母大小写和实际文件不一致也能正常运行,但Linux系统对路径大小写严格校验,只要有一个字母大小写不对,就会直接触发模块找不到的报错,逐一修正路径匹配即可。
  • pm2启动时的工作目录配置错误
    不要直接在非项目路径下执行sudo pm2 start server.js,pm2会默认缓存启动时的工作目录,导致服务内部所有相对路径的引用因为工作目录错位加载失败。正确操作是先cd进入项目根目录再执行启动命令;如果必须用高权限账号启动,需要通过--cwd参数显式指定项目根目录的绝对路径,例如sudo pm2 start server.js --cwd /你的项目绝对路径 --name 自定义服务名,不要让pm2自行推断工作路径。
  • 目录访问权限不足
    如果之前是用root账号安装的node_modules依赖,后续改用普通用户启动服务,会因为没有权限读取依赖文件触发同类模块找不到的报错。可通过ls -l node_modules查看该目录的所有者信息,将目录权限调整为和启动服务的用户匹配即可。

排查验证流程

按照从底层到上层的顺序逐次验证,不要跳步:

  1. 先在项目根目录直接执行node server.js,确认无报错、服务可正常监听对应端口
  2. 待直接启动无异常后,再切换到pm2托管服务进程
  3. 前面两步全部验证通过后,再检查NGINX的反向代理转发规则,将前端请求正确转发到Node服务的实际监听端口

内容的提问来源于stack exchange,提问作者overjoied

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 11:54:03