Node.js 使用 Mongoose 时报 ReferenceError: TextEncoder is not defined 求助
问题根因
你可以先执行node -v查看本地Node.js版本,这个报错的核心原因是本地Node.js版本低于v11.0.0,TextEncoder 是Node.js v11.0.0之后才默认挂载到全局的API,而新版Mongoose依赖的mongodb驱动包需要调用这个全局API。repl.it云环境默认使用较高版本的Node.js,所以运行不会报错。
解决方案
方案1:升级本地Node.js版本(最推荐)
直接将本地Node.js升级到当前官方支持的LTS版本(16.x、18.x、20.x均可),升级完成后删除项目下的node_modules文件夹、package-lock.json或yarn.lock文件,重新执行npm install安装依赖即可。方案2:手动注入全局API(无需升级Node/降级依赖)
在引入mongoose的代码前添加如下代码,手动把TextEncoder和TextDecoder挂载到全局:const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder; // 再写原有引入mongoose的逻辑 var mongoose = require('mongoose');方案3:降级Mongoose版本(适配低版本Node.js)
如果必须使用当前低版本Node.js,可以将Mongoose降级到v5.x版本,该版本的Mongoose依赖的mongodb驱动不会调用全局TextEncoder,执行以下命令安装即可:npm install mongoose@5
内容的提问来源于stack exchange,提问作者Seif Hafri
相关产品推荐
相关产品推荐

