javascript API域|如何在HubSpot中获取Domain,然后在Axios调用之前将其传递给API调用

k10s72fa  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(130)

我想在Axios呼叫后获得域名。因为axios调用需要域URL才能工作。
API调用是静态的,我试图放置我的域URL,调用工作正常。我们计划让我们的主题安装到另一个域,所以我的代码肯定不会工作:(。因此,我需要使其动态,使代码将工作在任何域要安装。
下面是我尝试运行的代码,但我不能得到任何工作结果:(

const axios = require("axios"); 

exports.main = async (context, sendResponse) => {
  // Use axios to make a GET request to the search API 
  const config = {
    method: "get",
    url: `https://api.hubapi.com/crm/v3/objects/contacts/${context.contact.vid}/associations/deals`,
    headers: {
      Authorization: "Bearer pat-na1-1d1c158f-6f71-4669-b3e9-0d0fa47b89b2",
    },
  }; 
  try {
    
    const host = window.location.hostname;
    
    const deals = [];
    const { data: dealIds } = await axios(config);   
    for await (const dealId of dealIds.results) {
      const { data: deal } = await axios.get(
        `${"https://" + host }/_hcms/api/congratsdeal_new?id=${dealId.id}`
      );
      deals.push(deal);
    }
    sendResponse({ statusCode: 200, body: JSON.stringify(deals) });
  } catch (error) {
    sendResponse({ statusCode: 400, body: JSON.stringify(error) });
  }
};

我想让API调用工作时安装到另一个域。使它动态,因为如果非编码器将安装主题,将无法取代静态URL,我们放置到JS文件只是为了使它的工作,这是不好的:(

i86rm4rw

i86rm4rw1#

要使代码中的API调用在安装在不同域上时工作,而不对域URL进行硬编码,您可以按如下方式修改代码:
将API基URL作为参数传递:您可以将其作为参数传递给主函数,而不是硬编码API基本URL。这样,当您的代码安装在不同的域上时,您可以配置API基本URL。
对API端点使用相对URL:不要为每个API端点构建包含域的完整URL,而是为API端点使用相对URL。Axios将自动解析这些相对于您提供的基本URL的相对URL。
下面是修改后的代码:

const axios = require("axios");

exports.main = async (context, sendResponse, apiBaseUrl) => {
  try {
    const config = {
      method: "get",
      url: `/crm/v3/objects/contacts/${context.contact.vid}/associations/deals`,
      headers: {
        Authorization: "Bearer pat-na1-1d1c158f-6f71-4669-b3e9-0d0fa47b89b2",
      },
    };

    const deals = [];
    const { data: dealIds } = await axios(config);

    for await (const dealId of dealIds.results) {
      const { data: deal } = await axios.get(
        `${apiBaseUrl}/_hcms/api/congratsdeal_new?id=${dealId.id}`
      );
      deals.push(deal);
    }
    
    sendResponse({ statusCode: 200, body: JSON.stringify(deals) });
  } catch (error) {
    sendResponse({ statusCode: 400, body: JSON.stringify(error) });
  }
};

现在,当您调用main函数时,将API基URL作为参数传递:

const apiBaseUrl = "https://api.hubapi.com"; // Change this to the actual base URL
exports.main(context, sendResponse, apiBaseUrl);

通过这样做,您可以基于安装代码的域动态配置apiBaseUrl,使代码在不同的域上工作,而无需在JavaScript文件中硬编码URL。

相关问题