使用Buffer.from时抛出Unknown encoding: base64url错误求助
解决Node.js 12中Buffer.from不支持base64url编码的问题
问题原因
Node.js 12.x版本不支持将base64url作为Buffer.from()的编码参数,这个特性是从Node.js v14.13.0才正式引入的,所以你在v12.22.12环境下调用会抛出编码未知的错误。另外你安装的buffer@3.6.4是核心Buffer的旧版polyfill,同样不支持base64url编码。
解决方案
方案1:手动转换base64url到标准base64
base64url是base64的变体,仅将+替换为-、/替换为_,并去掉末尾的=。可以手动转换后再用Buffer.from()处理:
// 把base64url格式转成标准base64 const base64Str = publicKey .replace(/-/g, '+') .replace(/_/g, '/') .padEnd(publicKey.length + (4 - publicKey.length % 4) % 4, '='); publicKey = Buffer.from(base64Str, 'base64');
方案2:升级Node.js版本
直接将Node.js升级到v14.13.0及以上,原生支持base64url编码参数,无需修改代码即可正常运行Buffer.from(publicKey, 'base64url')。
方案3:修改web-push库的代码
如果报错来自web-push的vapid-helper.js文件,可找到对应行(第107行),替换成上述手动转换的逻辑,绕过原生Buffer的编码限制。
内容的提问来源于stack exchange,提问作者Gaspar Liboreiro
相关产品推荐
相关产品推荐

