Postman预请求脚本用GitHub API获取PR时Octokit报window未定义
问题原因
抛错window is not defined的核心原因有两个:
- 你拉取的Octokit包是面向浏览器环境构建的版本,代码逻辑强依赖浏览器的
window全局对象,但Postman的预请求脚本运行在无浏览器的后端沙箱里,根本不存在window对象,直接执行必然报错。 - 你用的
pm.sendRequest是异步方法,现有写法没有做异步时序等待,就算库能正常加载,也会出现请求已经发出、库还没初始化完成的时序问题。
推荐实现:直接调用GitHub API(无需引入外部库)
不需要折腾第三方库导入,直接在Postman中配置请求即可,稳定性远高于在预请求脚本里动态加载外部库:
- 新建GET请求,请求地址填写PR查询接口:
https://api.github.com/repos/<user>/<repo>/pulls/<pr_number> - 在请求头中添加三个参数,绕过未认证用户的API限流,同时指定固定API版本避免兼容性问题:
Authorization:值为Bearer 你的GitHub个人访问令牌(令牌需开通repo权限,私有仓库必须配置,公开仓库可以不配但限流阈值很低)Accept:值为application/vnd.github+jsonX-GitHub-Api-Version:值为2022-11-28
如果需要在预请求脚本中动态拉取PR数据做后续处理,直接用Postman内置的请求方法即可,示例代码:
// 提前在集合变量中存好GitHub令牌,避免硬编码泄露 const githubToken = pm.collectionVariables.get("github_token"); const repoOwner = "替换为仓库所属用户名"; const repoName = "替换为仓库名"; const prId = "替换为要查询的PR编号"; pm.sendRequest({ url: `https://api.github.com/repos/${repoOwner}/${repoName}/pulls/${prId}`, method: "GET", header: { "Authorization": `Bearer ${githubToken}`, "Accept": "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28" } }, (error, response) => { if (error) { console.error("PR数据拉取失败:", error); return; } const prInfo = response.json(); // 将PR信息存入集合变量,供后续请求或测试脚本使用 pm.collectionVariables.set("current_pr_info", JSON.stringify(prInfo)); console.log("PR信息拉取完成,标题:", prInfo.title); });
备选方案:预请求脚本引入Octokit
如果确实需要使用Octokit的封装能力,不要引入浏览器版本的构建包,核心实现逻辑如下:
- 选用适配非浏览器环境的Octokit UMD构建版本
- 构造包含mock
window、self对象的沙箱执行上下文,解决全局对象缺失问题 - 在沙箱上下文中执行加载到的库代码,拿到Octokit构造函数初始化实例
- 实例配置鉴权信息后,再调用PR查询接口
注意:该方案依赖外部CDN资源稳定性,且Postman沙箱的API版本迭代可能导致兼容问题,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者rasilvap
相关产品推荐
相关产品推荐

