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

React应用使用Google Sheets作为CMS时,dotenv配置PRIVATE_KEY引发TypeError问题求助

解决React中使用dotenv加载Google私钥的TypeError问题

这个错误的根源很明确:你在.env文件中用\n表示换行,但React的dotenv并没有把这些\n解析成实际的换行符,导致私钥的格式不符合PEM规范,最终在fixproc.js的正则匹配环节失败(match2为null,所以访问match2[2]时抛出Cannot read property '2' of null)。

而你硬编码私钥时正常,是因为JavaScript会自动把字符串里的\n解析为真实换行,私钥格式完全符合要求。

两种可行的解决方案:

方案1:在.env文件中使用真实换行(推荐)

dotenv支持多行环境变量,只要用双引号包裹私钥,直接换行书写即可:

REACT_APP_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
*********
-----END PRIVATE KEY-----"

注意:确保私钥的每一行都和你从Google开发者控制台复制的完全一致,不要添加多余的空格或转义字符。

方案2:在代码中手动转换换行符

如果你不想修改.env文件,可以在使用私钥时,把字符串中的\n替换为真实的换行符:

const handleSubmit=async (e)=>{
 const doc =new GoogleSpreadsheet(process.env.REACT_APP_SHEET_ID);
 console.log(process.env.REACT_APP_PRIVATE_KEY)
 console.log(process.env.REACT_APP_CLIENT_EMAIL)
 await doc.useServiceAccountAuth({
 client_email:process.env.REACT_APP_CLIENT_EMAIL,
 // 手动替换转义的换行符
 private_key: process.env.REACT_APP_PRIVATE_KEY.replace(/\\n/g, '\n')
 });
 await doc.loadInfo();
 const sheet = doc.sheetsByIndex[0];
 await sheet.addRow({Website:website,Password:password})
 window.location.reload();
}

验证思路

不管用哪种方案,最终要确保process.env.REACT_APP_PRIVATE_KEY输出的是带有真实换行的PEM格式私钥,而不是包含\n字符串的单行文本。你可以通过console.log输出后查看格式是否正确——正确的私钥应该是分多行显示的,和你硬编码的内容完全一致。

内容的提问来源于stack exchange,提问作者tanmya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:57:28