【问题标题】:Troubleshooting 'Cannot read property , undefined' errors对“无法读取属性,未定义”错误进行故障排除
【发布时间】:2020-11-04 00:34:55
【问题描述】:

我有这个功能

  function getAvailableProviders(tmpDir, snips, processRepo) {
  const octokit = require("@octokit/rest");
  octokit.repos.listForOrg(
    { org: "terraform-providers", type: "public", per_page: 100 },
    (error, result) => {
      result.data.forEach((element) => {
        processRepo(tmpDir, element.name, snips, iterateOnDocFiles);
      });
    },
  );
}

当我运行我的程序时,我从 typescript 编译器得到这个错误

(node:15713) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'listForOrg' of undefined

问题是根据octokit文档,定义了repos.listForOrg

https://octokit.github.io/rest.js/v18#repos-list-for-org

我只是想学习(打字稿和节点),同时重新创建原始开发人员放弃的东西。根据 octokit 文档,我有我的要求声明。它没有接触到 api。我需要在我的节点项目中安装其他东西才能使其正常工作吗?

【问题讨论】:

  • 你看过使用文档吗:octokit.github.io/rest.js/v18#usage?看来您需要解构 Octokit: const { Octokit } = require("@octokit/rest");。然后用正确的配置设置它,它的返回值就是暴露repos.listForOrg
  • 这不是我对第 2 行所做的吗??
  • 为了它的价值,我重写了与文档中相同的那一行,上面列出了同样的错误。

标签: node.js typescript octokit-js


【解决方案1】:

我认为您需要对您的 require 稍作更改,并在 require 后添加 const octokit = new Octokit();(在您的示例中插入为第 3 行):

  function getAvailableProviders(tmpDir, snips, processRepo) {
  const { Octokit } = require('@octokit/rest'); // <-- change this line
  const octokit = new Octokit(); // <-- add this line
  octokit.repos.listForOrg(
    { org: "terraform-providers", type: "public", per_page: 100 },
    (error, result) => {
      result.data.forEach((element) => {
        processRepo(tmpDir, element.name, snips, iterateOnDocFiles);
      });
    },
  );
}

octokit readme

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多