在DigitalOcean部署MERN Stack时出现TextEncoder未定义错误
问题原因
- 根本原因是生产环境的Node.js版本过低:
TextEncoder和TextDecoder是从 Node.js v11.0.0 版本才开始支持全局挂载的API,如果生产环境Node版本低于v11,运行时就会抛出TextEncoder is not defined错误。你可以先在生产环境执行node -v命令查看当前Node版本,确认是否符合版本要求。 - 项目中引入的新版
mongoose等依赖默认依赖这两个全局API,开发环境运行正常是因为本地Node版本较高符合要求,和生产环境版本不一致导致了环境差异问题。
解决方案
方案1:升级生产环境Node.js版本(最推荐)
直接将生产环境的Node.js升级到v12及以上的LTS长期支持版本(推荐v16、v18、v20),既可以解决该报错,也能避免后续其他依赖的版本兼容问题。
升级完成后执行node -v确认版本无误,再重启服务即可。
方案2:手动添加polyfill(适合暂时无法升级Node版本的场景)
在你的index.js文件最顶部添加如下代码,手动将TextEncoder和TextDecoder挂载到全局对象:
const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder;
添加完成后重启服务即可正常运行。
方案3:降级兼容低版本Node的依赖版本
如果生产Node版本只能维持在v10及以下,可以将mongoose降级到v5.x版本,该版本mongoose不依赖全局TextEncoder API。
执行安装命令:npm install mongoose@5.x
安装完成后重启服务即可。
内容的提问来源于stack exchange,提问作者user16832151
相关产品推荐
相关产品推荐

