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

Cloud Functions请求处理失败:第三方API调用遇域名解析错误

解决Firebase Cloud Functions请求第三方API的CORS与域名解析问题

嘿,我来帮你搞定这个问题!首先看日志里的getaddrinfo ENOTFOUND cors-anywhere.herokuapp.com,这说明你用的公共CORS代理服务cors-anywhere.herokuapp.com已经停止服务了——这个公共实例早就因为流量过大被Heroku关停,所以域名根本解析不到,自然连不上。

而且其实你完全不需要第三方CORS代理!因为Firebase Cloud Functions是运行在服务器端的,不存在浏览器的CORS限制,你可以直接请求目标API,然后在自己的函数响应里添加CORS头就行。下面是具体的修复步骤和代码:

核心修复步骤

  • 移除失效的第三方CORS代理,直接请求目标API
  • 在函数响应中添加CORS允许头,让前端能正常接收数据
  • 正确处理API响应(转成JSON/文本再返回)
  • 安全存储API密钥(避免硬编码)

修改后的完整代码

const functions = require('firebase-functions');
const fetch = require('node-fetch');

exports.findPlayer = functions.https.onRequest((req, res) => {
  // 设置CORS头,允许前端跨域请求(建议指定具体域名,*仅用于测试)
  res.set('Access-Control-Allow-Origin', '*');
  
  // 处理OPTIONS预检请求(复杂跨域请求会触发)
  if (req.method === 'OPTIONS') {
    res.set('Access-Control-Allow-Methods', 'GET');
    res.set('Access-Control-Allow-Headers', 'Content-Type');
    return res.status(204).send('');
  }

  const nickname = req.query.nickname;
  const region = req.query.region;
  const mode = req.query.mode;
  
  // 从Firebase环境变量获取API密钥(更安全)
  // 先运行命令设置:firebase functions:config:set pubgtracker.api_key="你的密钥"
  const apiKey = functions.config().pubgtracker.api_key;

  const requestOptions = {
    method: "GET",
    headers: {
      'TRN-Api-Key': apiKey // 注意:PubgTracker要求的API头是TRN-Api-Key,不是my-api-key!
    }
  };

  // 直接请求目标API,无需第三方代理
  fetch(`https://api.pubgtracker.com/v2/profile/pc/${nickname}?region=${region}&mode=${mode}`, requestOptions)
    .then(response => {
      if (!response.ok) {
        throw new Error(`API请求失败:${response.status}`);
      }
      return response.json(); // 将响应转成JSON格式返回
    })
    .then(data => {
      res.send(data);
    })
    .catch(error => {
      // 捕获并返回错误信息,方便调试
      console.error('请求出错:', error);
      res.status(500).send(`请求失败:${error.message}`);
    });
});

额外关键注意点

  1. API头字段修正:你之前写的my-api-key是错误的,PubgTracker的API要求的请求头是TRN-Api-Key,这个一定要改对,否则会返回权限错误。
  2. 错误处理:新增了catch块捕获请求过程中的异常,返回明确的错误信息,方便你排查问题。
  3. 安全建议:不要把API密钥硬编码在代码里,用Firebase环境变量存储更安全,避免密钥泄露。

这样修改后,你的Cloud Functions应该就能正常获取数据并返回给前端了,再也不会出现域名解析失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:45