获取GitHub文件SHA值失败:返回undefined如何解决?
如何正确获取GitHub文件的SHA值?
你的问题出在请求返回的是文件原始内容,而非包含SHA值的文件元数据对象。从响应的content-type和x-github-media-type可以看出,当前请求处于raw模式,所以data字段是文件的内容字符串,自然拿不到sha。
解决方法
方法一:指定请求头获取元数据
在请求中添加Accept头,明确要求返回GitHub API的JSON格式元数据:
import {Octokit} from "https://cdn.skypack.dev/octokit"; import token from "./config.js"; const token_string = token.token_string; export const octokit = new Octokit({ auth: token_string, }); const params = { owner: "na-czczo", repo: "r", file_path: "f.json" }; const {data} = await octokit.request('GET /repos/{owner}/{repo}/contents/{file_path}', { ...params, headers: { 'Accept': 'application/vnd.github.v3+json' } }); console.log(`%c${data.sha}`, 'color: brown');
方法二:使用Octokit封装的REST方法
Octokit提供了更直观的REST API封装,避免手动拼接请求路径和头信息的错误:
import {Octokit} from "https://cdn.skypack.dev/octokit"; import token from "./config.js"; const token_string = token.token_string; export const octokit = new Octokit({ auth: token_string, }); const {data} = await octokit.rest.repos.getContent({ owner: "na-czczo", repo: "r", path: "f.json" // 注意参数名是path,不是file_path }); console.log(`%c${data.sha}`, 'color: brown');
为什么之前的方法失效?
GitHub的/repos/{owner}/{repo}/contents/{path}接口会根据请求头或参数返回不同格式:
- 当请求头
Accept为application/vnd.github.v3.raw时,返回文件原始内容 - 当请求头为
application/vnd.github.v3+json时,返回包含sha、size、download_url等字段的元数据对象
你的请求默认触发了raw模式,所以无法获取SHA值。通过上述两种方法强制获取JSON元数据,就能拿到所需的SHA值。
内容的提问来源于stack exchange,提问作者trzczy
相关产品推荐
相关产品推荐

