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

Node.js环境下Firebase Pub/Sub函数HTTP请求提取数据异常求助

Firebase Pub/Sub定时函数拉取CoinMarketCap接口异常排查方案

核心问题排查步骤

  • 认证头配置错误:CoinMarketCap官方要求的接口认证头为X-CMC_PRO_API_KEY,你当前代码使用的Authorization头不符合规范,会直接触发接口权限报错,返回非业务数据。
  • 请求参数逻辑失效:你封装的requestPromise函数入参path未被实际使用,内部路径是硬编码值,外部传入的路径参数完全不生效。
  • 请求路径语法错误:调用requestPromise时传入的路径https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?start=query=limit=存在明显的参数拼接错误,缺少参数值、缺少参数分隔符&,会被接口判定为非法请求。
  • 异步逻辑未执行:onRun回调中定义的匿名async函数没有添加()触发执行,内部请求逻辑实际从未运行。
  • 缺少JSON序列化步骤:http模块接收的响应默认是字符串格式,未经过JSON.parse转换就直接输出,自然和预期的JSON对象格式不符。
  • 缺少响应状态校验:当前代码没有判断接口返回的HTTP状态码,哪怕接口返回4xx、5xx错误,也会直接把错误信息返回,导致拿到的是报错内容而非业务数据。

修正后代码

封装的请求函数

import * as http from "http";

async function requestPromise(path: string) {
  return new Promise((resolve, reject) => {
    const options = {
      hostname: "pro-api.coinmarketcap.com",
      path: path, // 动态使用传入的路径参数
      method:"GET",
      headers: {
        "X-CMC_PRO_API_KEY": "你的实际API密钥", // 替换为正确的认证头
      },
    };

    http.get(options, (resp) => {
      let data = "";
      // 先校验响应状态码
      if (resp.statusCode < 200 || resp.statusCode >= 300) {
        reject(new Error(`接口请求失败,状态码:${resp.statusCode}`));
        resp.resume();
        return;
      }

      resp.on("data", (chunk) => {
        data += chunk;
      });

      resp.on("end", () => {
        try {
          // 字符串转JSON对象
          const jsonResult = JSON.parse(data);
          resolve(jsonResult);
        } catch (parseErr) {
          reject(new Error(`JSON解析失败:${parseErr.message},原始返回内容:${data}`));
        }
      });

    }).on("error", (reqErr) => {
      reject(reqErr);
    });
  });
}

定时触发函数

exports.updateCoinPrices = functions.pubsub.schedule("every 5 minutes")
.onRun(async (context) => {
  try {
    // 传入合法的路径参数,无需携带域名
    const result = await requestPromise("/v1/cryptocurrency/listings/latest?start=1&limit=10&convert=USD");
    console.log("拉取到的接口数据:", result);
  } catch (error) {
    console.error("请求出错:", error);
  }
  return null;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:36:03