WSL2 Ubuntu下Node.js连接MongoDB出现TextEncoder未定义报错
报错原因
这个报错是当前使用的Node.js版本过低导致的:TextEncoder 是Node.js v11.0.0之后才默认挂载到全局的API,你安装的mongoose版本依赖的whatwg-url包需要调用这个全局API,低于v11的Node环境无法识别该变量就会抛出错误。
解决方案
方案1(推荐):升级Node.js到长期支持版本
使用nvm(Node版本管理器)升级操作最简便,不会污染系统环境:
- 先清空当前项目的依赖缓存:
rm -rf node_modules package-lock.json yarn.lock
- 安装nvm,完成后重启终端或执行
source ~/.bashrc(如果用zsh就替换为source ~/.zshrc)使配置生效 - 安装最新的Node.js LTS版本:
nvm install --lts # 切换到刚安装的LTS版本 nvm use --lts # 设置为默认版本,避免重启终端后版本回退 nvm alias default --lts
- 重新安装项目依赖后启动服务即可:
npm install node server.js
方案2(临时兼容):手动注入全局API
如果暂时不能升级Node版本,可以在server.js文件最顶部添加以下代码,手动把TextEncoder挂载到全局:
const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder;
注意该方案仅作临时兼容使用,Node.js v10及更早版本已经停止官方维护,存在安全漏洞,长期使用建议优先升级Node版本。
额外优化提示
你当前使用的如果是mongoose 6.x及以上版本,mongoose.connect方法已经默认开启useNewUrlParser等参数,代码里传入的配置可以直接删除,不会产生警告。
内容的提问来源于stack exchange,提问作者redpanda2236
相关产品推荐
相关产品推荐

