VPS上运行Node.js项目引用mongodb时报TextEncoder未定义错误如何解决
问题原因
该报错由VPS上的Node.js版本过低导致:TextEncoder是Node.js v11.0.0版本才正式加入全局作用域的内置API,你本地开发环境的Node.js版本高于v11所以运行正常。你引入的高版本mongodb依赖包依赖whatwg-url库,后者会直接调用全局的TextEncoder,低版本Node环境下找不到这个API就会抛出异常。
可用解决方案
- 方案1(推荐):升级VPS上的Node.js版本
将VPS的Node.js升级到v14.x及以上的LTS长期支持版本即可直接兼容所有新的依赖API,升级完成后删除node_modules目录重新安装依赖启动项目即可。 - 方案2:手动添加API polyfill
若暂时无法升级Node版本,可在项目入口文件(如app.js)的最顶部添加以下代码,手动将TextEncoder挂载到全局对象:const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder; - 方案3:降级mongodb依赖版本
若不想修改Node版本也不想加polyfill,可将mongodb依赖降级到3.x版本,该版本的mongodb不依赖需要高版本API的whatwg-url,执行以下命令安装即可:npm install mongodb@3
内容的提问来源于stack exchange,提问作者hikari
相关产品推荐
相关产品推荐

