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

使用PM2部署NestJS出现访问拒绝及TextEncoder报错如何解决

问题根因

访问端口返回ERR_CONNECTION_REFUSED的直接原因是NestJS服务启动失败,3003端口未处于监听状态,启动失败的核心触发点为TextEncoder is not defined报错,该报错有两类常见触发场景:

  • 服务运行环境的Node.js版本过低:Node.js v11.0.0之前的版本未将TextEncoder/TextDecoder挂载到全局作用域,仅可通过util模块引入调用,而新版本NestJS及其依赖默认调用全局的TextEncoder,版本不匹配就会触发该报错。
  • PM2绑定的Node.js版本与当前环境使用的版本不一致:如果你通过nvm等版本管理工具安装了高版本Node,但PM2是通过系统旧版本Node安装的,PM2启动服务时会调用自身绑定的低版本Node,同样会触发该报错。
解决方案

1. 先确认版本问题

执行以下命令分别查看当前环境Node版本和PM2绑定的Node版本,确认是否存在版本低于v12的情况:

node -v
pm2 info node

2. 版本不匹配修复方案

  • 如果是全局Node版本过低,直接升级到Node v16/v18这类长期支持版本即可适配当前主流NestJS版本。
  • 如果是PM2绑定的Node版本与当前版本不一致,先停止现有故障服务pm2 delete my-backend,再执行npm install -g pm2重新安装PM2匹配当前Node版本,安装完成后执行pm2 update更新PM2守护进程即可。

3. 无法升级Node的临时兼容方案

如果暂时不能升级Node版本,可以在NestJS项目的入口文件main.ts最顶部添加如下代码,手动挂载全局TextEncoder:

import { TextEncoder, TextDecoder } from 'util';
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;

修改后重新构建项目,再用PM2启动即可。

4. 验证修复效果

启动服务后执行pm2 logs my-backend确认无报错,再执行ss -tunlp | grep 3003确认端口已经正常监听,之后即可正常访问IP+3003端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:24:05