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

在Node.js中调用HubSpot API无法获取Deal对象属性值

解决Node.js调用HubSpot API无法获取Deal属性的问题

我之前也踩过这个坑!Postman能正常拿到dealname、dealstage这些属性,但Node.js请求就拿不到,大概率是请求参数拼接或者响应处理的问题,咱们一步步排查解决:

1. 确保请求参数完全正确(重点!)

Postman里重复的properties参数,在Node.js里如果直接拼接URL字符串,很容易被处理错误。比如你如果手动写URL,重复写&properties=xxx可能没问题,但用一些HTTP库(比如原生http模块的querystring)的时候,重复的key会被覆盖,这时候得把properties改成数组格式:

  • 用axios的话,在params里把properties设为数组:
    params: {
      hapikey: 'demo',
      includeAssociations: true,
      properties: ['dealname', 'dealstage', 'closedate', 'hubspot_owner_id', 'amount'],
      limit: 10
    }
    
  • 用原生querystring的话,也要传数组:
    const params = querystring.stringify({
      // ...其他参数
      properties: ['dealname', 'dealstage', 'closedate', 'hubspot_owner_id', 'amount']
    });
    

这样HTTP库会自动把它转换成&properties=dealname&properties=dealstage的格式,和Postman的请求完全一致。

2. 检查请求Headers和方法

HubSpot的这个API是GET请求,而且需要确保请求头里包含Accept: application/json——Postman默认会加这个,但Node.js里很多HTTP库不会自动设置,导致返回的可能是纯文本或者其他格式,解析后自然找不到属性。

比如在原生https请求里要加:

const options = {
  // ...其他选项
  headers: {
    'Accept': 'application/json'
  }
};

3. 正确解析响应体

Node.js里发起请求后,响应体是分块返回的,必须先收集完整再解析成JSON。如果直接用部分数据解析,或者没转成JSON,就会出现“找不到属性”的情况。

比如原生请求的正确处理方式:

let data = '';
res.on('data', (chunk) => {
  data += chunk; // 收集所有响应块
});

res.on('end', () => {
  try {
    const result = JSON.parse(data); // 转成JSON对象
    console.log(result.deals[0].properties); // 这里就能拿到属性了
  } catch (err) {
    console.error('解析JSON出错:', err);
  }
});

完整示例代码(用axios)

这是我测试过能正常拿到属性的代码:

const axios = require('axios');

async function fetchHubSpotDeals() {
  try {
    const res = await axios.get('https://api.hubapi.com/deals/v1/deal/paged', {
      params: {
        hapikey: 'demo',
        includeAssociations: true,
        properties: ['dealname', 'dealstage', 'closedate', 'hubspot_owner_id', 'amount'],
        limit: 10
      },
      headers: {
        'Accept': 'application/json'
      }
    });

    // 打印第一个deal的属性看看
    if (res.data.deals.length > 0) {
      console.log('第一个Deal的属性:', res.data.deals[0].properties);
    }
  } catch (err) {
    console.error('请求出错:', err.response ? err.response.data : err.message);
  }
}

fetchHubSpotDeals();

最后排查点

如果还是不行,先打印Node.js请求的完整URL(比如用axios的话可以看res.config.url),和Postman里的URL对比,确保完全一致;另外检查响应的状态码是不是200,有没有返回错误信息(比如hapikey权限问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:07