Octokit仅返回单个Pull Request而非所有Issues问题排查求助
嘿,我看你这里踩了个小坑——你用错方法啦!
repo.getIssueEvents() 这个方法根本不是用来获取仓库Issue列表的,它的作用是获取仓库里和Issue/PR相关的操作事件(比如某人评论了Issue、PR被合并、Issue被关闭这类动作记录),而且GitHub API默认分页返回第一页的30条数据,你看到的“第一个Pull Request”其实只是第一页事件里的第一条而已,和你想要的Issue列表完全是两回事。
想要获取仓库的所有Issue,你应该用Octokit专门的 issues.listForRepo() 方法,它才是用来拉取仓库Issue(包括PR,因为GitHub里PR本质上也是一种Issue)的官方接口。我给你修正一下代码:
首先确保你安装的是正确的Octokit包(现在官方推荐用@octokit/rest):
npm install @octokit/rest
然后修改你的代码:
const { Octokit } = require("@octokit/rest"); async function retrieveIssues(owner, repoName) { // 初始化Octokit,这里更推荐用个人访问令牌(在GitHub设置里生成),比明文用户名密码安全 const octokit = new Octokit({ auth: "你的个人访问令牌" // 要是一定要用用户名密码,改成:auth: "username:password" }); try { // 获取仓库的所有Issue,支持各种过滤参数 // 如果你只想获取纯Issue(排除PR),可以加上 filter: "all" 参数 const allIssues = await octokit.paginate(octokit.issues.listForRepo, { owner: owner, repo: repoName, state: "all", // 可选值:open/closed/all,默认是open per_page: 100, // 每页最多返回100条,默认30条 }); console.log("仓库所有Issue:", allIssues); } catch (err) { console.error("获取Issue失败:", err); } } // 调用示例,替换成你要查询的仓库所有者和仓库名 retrieveIssues("octocat", "Hello-World");
这里用了octokit.paginate()方法,它会自动帮你处理GitHub API的分页问题——如果仓库里的Issue超过100条,它会自动拉取所有页的数据并合并成一个数组,不用你自己去处理分页逻辑。
另外补充一下:如果你用的是旧版本的Octokit(比如github-api包),那用法会有点不一样,但核心逻辑还是一样的:找专门获取Issue列表的方法,而不是事件方法。
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

