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

Axios对接ActiveCampaign API在Firebase云函数中的错误捕获问题

解决Firebase云函数中Axios捕获ActiveCampaign错误信息的问题

问题出在你直接将Axios抛出的error对象返回给前端——Axios的错误对象包含不可序列化的属性,导致关键的错误响应数据无法正常传递。ActiveCampaign返回的错误详情实际存储在error.response.data中,需要显式提取后返回。

具体解决步骤:

  • 区分Axios错误类型:Axios抛出的错误分两种:服务器返回非2xx状态码的响应错误(有error.response属性),以及网络/请求配置错误(无error.response属性)。
  • 提取错误详情:对于响应错误,提取error.response.data(ActiveCampaign的错误信息)、error.response.status(状态码);对于其他错误,返回通用提示。
  • 避免直接返回Error对象:Error对象的很多属性无法被JSON序列化,必须提取可序列化的字段返回。

修改后的代码

const functions = require("firebase-functions");
const axios = require("axios");
const cors = require("cors")({ origin: true });

const addTagToContact = async (contactId: string, tagId: string) => {
  try {
    await axios({
      method: "post",
      url: "https://xyz.api-us1.com/api/3/contactTags",
      headers: {
        "Api-Token": "api-token",
      },
      data: {
        contactTag: {
          contact: contactId,
          tag: tagId,
        },
      },
    });
  } catch (e) {
    // 同步修改标签接口的错误处理逻辑
    const error = e as any;
    console.error("Add tag error:", error.response?.data || error.message);
  }
};

export const createNewContact = functions.https.onRequest((request: { body: any; }, response: { status: (arg0: number) => void; send: (arg0: { response?: unknown; status?: number; message?: string; }) => void; }) => {
  cors(request, response, async () => {
    const newContactData = request.body;
    if(!newContactData.email || !newContactData.fieldValues) {
      return response.send({
        response: 'No contact data provided'
      })
    } 

    try {
      const responseActiveCampaign = await axios({
        method: "post",
        url: "https://xyz.api-us1.com/api/3/contacts",
        headers: {
          "Api-Token": "api-token",
          "Content-Type": "application/json"
        },
        data: {
          contact: newContactData,
        },
      });
      console.log('response active campaign console log', responseActiveCampaign)
      await addTagToContact(responseActiveCampaign.data.contact.id, "1")
      return response.send({
        response: responseActiveCampaign.data
      })
    } catch (error) {
      const axiosError = error as any;
      let errorResponse;
      let statusCode = 500;

      if (axiosError.response) {
        // 服务器返回了错误响应,提取ActiveCampaign的错误信息
        errorResponse = axiosError.response.data;
        statusCode = axiosError.response.status;
        console.error('ActiveCampaign Error:', errorResponse);
      } else if (axiosError.request) {
        // 请求已发送但无响应
        errorResponse = { message: "No response received from ActiveCampaign" };
        console.error('Request Error:', axiosError.message);
      } else {
        // 请求配置错误
        errorResponse = { message: axiosError.message };
        console.error('Config Error:', axiosError.message);
      }

      response.status(statusCode);
      response.send({
        response: errorResponse
      });
    }
  });
});

说明

  • 通过axiosError.response.data可以直接获取ActiveCampaign返回的完整错误信息(比如重复联系人时的提示),这些信息可直接返回给前端展示。
  • 针对不同错误场景做了区分,确保无论哪种错误都能返回清晰的信息给前端,同时在云函数日志中记录详细错误便于排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:54:16