You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TSlint提示atob弃用替换为Buffer.from后Node14下报错怎么解决?

报错根因

Buffer.from(data, 'base64') 返回的是Node.js的二进制Buffer对象,而JSON.parse()仅接受字符串类型的入参。原atob方法会直接返回解码后的UTF-8字符串,因此原来的代码可以正常执行,直接替换后缺少了Buffer转字符串的步骤,就会触发报错。

可行解决方案

方案1:基础修复(适配绝大多数场景)

在Buffer后调用toString()方法转为字符串即可:

return JSON.parse(Buffer.from(token.split('.')[1], "base64").toString());

方案2:兼容JWT base64url编码场景

如果你解码的是JWT的payload段,JWT使用的是base64url编码(替换了+为-、/为_,且省略了末尾的=填充位),Node14的Buffer.from默认仅支持标准base64格式,需要先做格式转换再解码:

const rawPayload = token.split('.')[1]
  // 转换为标准base64字符
  .replace(/-/g, '+')
  .replace(/_/g, '/');
// 补全base64所需的填充位
const padLength = 4 - (rawPayload.length % 4);
const standardBase64Payload = rawPayload.padEnd(rawPayload.length + padLength, '=');

return JSON.parse(Buffer.from(standardBase64Payload, 'base64').toString());

方案3:直接忽略lint警告(Node14.16.0+版本适用)

Node.js从14.16.0版本开始已经全局支持atob/btoa方法,如果你用的小版本高于等于14.16.0,可以直接添加注释忽略tslint的弃用警告,不用改原有逻辑:

// tslint:disable-next-line: deprecation
return JSON.parse(atob(token.split('.')[1]));
TS类型错误补充排查

如果你是TypeScript项目,还可能出现Buffer找不到定义的报错,安装对应版本的Node类型声明即可:

npm install @types/node@14 --save-dev

内容的提问来源于stack exchange,提问作者Rômulo Sorato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:36:03