Vercel部署的Next.js调用Google Sheets API POST请求失败如何解决
Next.js Vercel部署Google API提交失败排查方案
FetchError: request to https://www.googleapis.com/oauth2/v4/token failed, reason: Client network socket disconnected before secure TLS connection was established
该问题的核心诱因是getStaticProps运行在Vercel构建节点环境,而pages/api接口属于Serverless Functions运行时,两者的网络策略、环境变量作用域、运行时规则存在差异,可按以下步骤排查:
1. 确认运行时配置
- 若你在api路由中指定了Edge Runtime,Google OAuth2的TLS握手流程与部分版本Edge Runtime存在兼容问题,可手动指定使用Node.js运行时,在
pages/api/add.js/ts文件顶部添加如下配置:
export const config = { runtime: 'nodejs18.x' }
2. 检查环境变量作用域
- Vercel环境变量默认分构建时和运行时两个独立作用域,你配置的Google API凭证如果仅勾选了「Build」作用域,Serverless Functions运行时将无法读取到对应变量。进入Vercel控制台项目的环境变量配置页,确认Google凭证的作用域同时勾选了「Runtime」,修改后需重新部署生效。
3. 调整请求配置
- Serverless Functions冷启动阶段网络建联耗时更长,Google API客户端默认的超时时间过短会导致TLS握手未完成就断开连接,同时Vercel部分节点IPv6链路访问Google API存在异常,可在初始化客户端时同步调整配置,示例如下:
const { google } = require('googleapis'); const axios = require('axios'); const auth = new google.auth.GoogleAuth({ credentials: JSON.parse(process.env.GOOGLE_SERVICE_ACCOUNT), scopes: ['https://www.googleapis.com/auth/spreadsheets'], httpAdapter: axios.create({ timeout: 15000, // 超时时间调整为15秒 family: 4 // 强制走IPv4请求,规避IPv6链路异常 }) });
4. 验证执行时长上限
- Vercel免费版Serverless Functions最大执行时长为10秒,付费版为60秒,可在api路由中添加日志打印每个步骤的耗时,在Vercel控制台的函数日志板块查看总耗时是否超出上限。
内容的提问来源于stack exchange,提问作者Lax Mariappan
相关产品推荐
相关产品推荐

