在IIS下运行NodeJS脚本遇Buffer()弃用警告求助
解决Windows IIS+iisnode环境下Buffer()弃用错误的离线方案
问题定位
你提到的fs、http、path、readline、url都是Node.js核心模块,不会引入弃用的Buffer()调用,问题大概率出在express或其依赖的第三方包,也可能是iisnode自身版本过旧导致。另外先确认服务器上的Node.js版本:运行node -v,因为Buffer()构造函数在v6后被标记弃用、v10后完全移除,若Node.js版本过旧,也可能触发该错误。
离线环境排查与修复步骤
本地镜像环境排查依赖
- 在能联网的机器上搭建和服务器相同版本的Node.js环境,复制项目的
package.json和package-lock.json到本地 - 执行
npm install安装所有依赖,然后用npm ls查看依赖树,定位到哪个第三方包在使用弃用的Buffer() - 若无法直观找到,可使用
npm audit(本地联网可用)扫描依赖中的弃用API调用
- 在能联网的机器上搭建和服务器相同版本的Node.js环境,复制项目的
替换问题包版本
- 找到问题包后,查其官方更新日志,选择修复了
Buffer()弃用问题的稳定版本 - 在本地执行
npm pack <包名>@<目标版本>,生成对应的.tar.gz包文件 - 将该包文件拷贝到服务器项目目录,执行
npm install ./<包文件名>.tar.gz完成离线替换
- 找到问题包后,查其官方更新日志,选择修复了
检查并更新iisnode
- 若排查后不是项目依赖的问题,可能是iisnode版本过旧,在本地下载iisnode最新稳定版的安装包
- 拷贝到服务器后卸载旧版本,重新安装新版iisnode,重启IIS服务
应急临时方案(不推荐长期使用)
若暂时无法找到问题包,可在项目入口文件顶部添加以下代码兼容:global.Buffer = global.Buffer || require('buffer').Buffer;
内容的提问来源于stack exchange,提问作者RobG
相关产品推荐
相关产品推荐

