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

Node.js调用Harvest API获取项目并解析JSON及认证问题求助

嘿,作为Node.js新手刚接触Harvest API确实会有点无从下手,我来一步步帮你搞定从认证到导出项目数据为JSON的整个流程!

第一步:搞定Harvest API认证

Harvest API要求所有请求都必须认证,对于新手来说,**Personal Access Token(PAT)**是最直接的方式(比OAuth2简单太多)。获取PAT的步骤很简单:

  • 登录你的Harvest账号,进入「Account Settings」(账户设置)
  • 切换到「Developers」标签页
  • 点击「Create New Personal Access Token」,输入一个描述(比如“Node.js项目导出工具”),然后生成Token
  • 一定要保存好生成的Token和你的Account ID(页面上会一起显示),这两个是后续请求的关键!

调用API时,需要在请求头里带上三个必填字段:

  • Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN
  • Harvest-Account-ID: YOUR_ACCOUNT_ID
  • User-Agent: 你的应用名称 (你的邮箱地址) —— Harvest要求必须填这个,不然会拒绝请求
第二步:准备Node.js环境&安装依赖

首先确保你已经安装了Node.js和npm。然后我们用axios来发送HTTP请求(它比原生fetch更方便处理分页和错误),在项目目录下运行:

npm install axios
第三步:编写代码获取项目并导出为JSON

创建一个新文件(比如harvest-projects.js),把下面的代码复制进去,记得替换成你自己的PAT、Account ID和User-Agent信息:

const axios = require('axios');
const fs = require('fs').promises;

// 替换成你的信息
const HARVEST_PAT = '你的Personal Access Token';
const HARVEST_ACCOUNT_ID = '你的Account ID';
const BASE_URL = 'https://api.harvestapp.com/v2';

// 获取所有项目(处理分页)
async function getAllProjects() {
  let allProjects = [];
  let currentPage = 1;
  const itemsPerPage = 100; // Harvest API允许的最大每页数量

  while (true) {
    try {
      const response = await axios.get(`${BASE_URL}/projects`, {
        headers: {
          'Authorization': `Bearer ${HARVEST_PAT}`,
          'Harvest-Account-ID': HARVEST_ACCOUNT_ID,
          'User-Agent': 'MyHarvestExporter (my-email@example.com)'
        },
        params: {
          page: currentPage,
          per_page: itemsPerPage
        }
      });

      const { projects, total_pages } = response.data;
      allProjects = [...allProjects, ...projects];

      // 如果当前页是最后一页,停止循环
      if (currentPage >= total_pages) break;
      currentPage++;
    } catch (error) {
      console.error('获取项目数据失败:', error.response?.data || error.message);
      throw error;
    }
  }

  return allProjects;
}

// 主函数:获取数据并保存为JSON
async function main() {
  try {
    const projects = await getAllProjects();
    // 保存到本地JSON文件,用2个空格缩进让格式更易读
    await fs.writeFile('harvest-projects.json', JSON.stringify(projects, null, 2));
    console.log(`搞定!成功获取并保存了${projects.length}个项目到harvest-projects.json`);
  } catch (error) {
    console.error('程序运行出错:', error);
  }
}

// 启动程序
main();
第四步:运行代码并验证

在终端里运行:

node harvest-projects.js

如果一切顺利,你会看到成功的提示,然后在项目目录下就能找到harvest-projects.json文件,里面就是所有项目的JSON数据啦!

一些小提醒
  • 确保你的PAT有读取项目的权限(默认生成的PAT权限足够,但如果后续遇到权限错误,可以去Harvest的开发者页面检查)
  • 如果你的项目数量很多,Harvest API会分页返回,所以代码里的循环处理分页是必须的,不然只能拿到第一页的数据
  • 要是遇到错误,可以先看终端里的错误信息,Harvest的API返回的错误提示通常很明确(比如Token无效、权限不足等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:02