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_TOKENHarvest-Account-ID: YOUR_ACCOUNT_IDUser-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
相关产品推荐
相关产品推荐

