Nextjs API 请求仅在本地有效

Posted

技术标签:

【中文标题】Nextjs API 请求仅在本地有效【英文标题】:Nextjs API request only works locally 【发布时间】:2021-06-20 05:16:49 【问题描述】:

我正在尝试通过 Next.js API 路由使用“google-spreadsheet”写入谷歌表格。当我在本地测试时,它工作得很好。我可以在谷歌表中看到正在更新的数据。但是,当我将它部署到 Vercel 时,它不起作用。 Vercel 的“功能”日志显示以下错误消息。

错误认证 FetchError: 对https://www.googleapis.com/oauth2/v4/token 的请求失败,原因:客户端网络套接字在建立安全 TLS 连接之前断开 在客户端请求。 (/var/task/node_modules/node-fetch/lib/index.js:1461:11) 在 ClientRequest.emit (events.js:315:20) 在 TLSSocket.socketErrorListener (_http_client.js:469:9) 在 TLSSocket.emit (events.js:315:20) 在 emitErrorNT (internal/streams/destroy.js:106:8) 在 emitErrorCloseNT (internal/streams/destroy.js:74:3) 在 processTicksAndRejections (internal/process/task_queues.js:80:21) 类型:'系统', 错误号:'ECONNRESET', 代码:'ECONNRESET', 配置: 方法:'POST', url: 'https://www.googleapis.com/oauth2/v4/token', 数据: grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer', 断言:....

如果有帮助,下面是我的代码。

export default async function addRowAPI(req, res) 
  if (req.method === 'POST') 
    try 
      let doc;
      try 
        doc = new GoogleSpreadsheet(process.env.SPREADSHEET_ID);
       catch (error) 
        console.log('error at line 15:', error);
      

      try 
        await doc.useServiceAccountAuth(
          client_email: process.env.GOOGLE_SHEETS_CLIENT_EMAIL,
          private_key: (process.env.GOOGLE_SHEETS_PRIVATE_KEY || '').replace(
            /\\n/g,
            '\n'
          ),
        );
       catch (error) 
        console.log('error authentication', error);
      

      await doc.loadInfo(); 
      console.log(doc.title);

      const sheet = doc.sheetsByTitle['Test_Sheet']; 
      console.log(sheet.title);
      console.log('addRow Doc:', doc);

      const newRow = await sheet.addRow(req.body);
      

      res.status(201).send();
     catch (error) 
      res.status(500).json(error);
    
   else if (req.method === 'GET') 
    res.status(200).json( ping: 'pong' );
  

【问题讨论】:

您是否在 Vercel 中正确设置了所有环境变量?它抱怨身份验证错误,这可能表明凭据错误/不存在。 @juliomalves 你是对的。我错过了设置环境变量之一。它现在正在工作。谢谢:) 【参考方案1】:

如 cmets 中所述,该错误抱怨身份验证问题,表明凭据错误/不存在。仔细检查您是否在 Vercel 中正确设置了所有环境变量。

【讨论】:

以上是关于Nextjs API 请求仅在本地有效的主要内容,如果未能解决你的问题,请参考以下文章

Nextjs 集中授权

在 Vercel 上部署的 Nextjs 中的 api 请求出现 504/502 错误

使用React和NextJS保护API身份验证请求

NextJS/Vercel/MongoDB FetchError:对 http://localhost:3000/api/gear 的请求失败,原因:连接 ECONNREFUSED 127.0.0.1

NextJS getServerSideProps() 具有多个获取请求

为啥我从托管在 Firebase 上的 NextJs 应用程序仅针对 POST 请求收到“502 网关”错误?