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

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+json
    • X-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的封装能力,不要引入浏览器版本的构建包,核心实现逻辑如下:

  1. 选用适配非浏览器环境的Octokit UMD构建版本
  2. 构造包含mock window、self对象的沙箱执行上下文,解决全局对象缺失问题
  3. 在沙箱上下文中执行加载到的库代码,拿到Octokit构造函数初始化实例
  4. 实例配置鉴权信息后,再调用PR查询接口

注意:该方案依赖外部CDN资源稳定性,且Postman沙箱的API版本迭代可能导致兼容问题,非必要不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:19:51