Github API v3:更新文件不起作用(404)

时间:2018-02-12 11:47:28

标签: javascript jquery github-api

我尝试使用Github v3 api更新文件。我能找到的大多数文档都是基于较旧的API。我想利用:https://developer.github.com/v3/repos/contents/#update-a-file

我首先使用以下方法获取文件:

 $.ajax({
        url: "https://api.github.com/repos/"+owner+"/"+repo+"/contents/"+path,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Authorization", "user" + btoa(owner+":"+passwrd));
        },
        type: 'GET',
        dataType: 'json',
        contentType: 'application/json',
        success: function (data) {
            var jsonFile = data.content;
            sha = data.sha;
            var decodedJson = atob(jsonFile);
            var parsedDecodedJson = JSON.parse(decodedJson);
            parseData(parsedDecodedJson);
        },
        error: function(error){
            alert.addClass('alert-danger').removeClass('hidden').html('Something went wrong:'+error.responseText);
        }
    });

完美无缺。

编辑文件后,我尝试更新文件。 在我的提交中,我使用jQuery发布以下内容:

    var postData = {
        "message": "Update",
        "content":  btoa(obj),
        "sha": sha,
        "branch":"gh-pages"
    };

    $.ajax({
        url: "https://api.github.com/repos/"+owner+"/"+repo+"/contents/"+path,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Authorization", "user" + btoa(owner+":"+passwrd));
        },
        type: 'PUT',
        data: postData,
        dataType: 'json',
        contentType: 'application/json',
        success: function (data) {
            console.log("Success!!!", data);
        },
        error: function(error){
            console.log("Cannot get data", error);
        }
    });

所有变量都包含预期值。无论如何,我一直得到404。 我知道API经常返回404而不是像403这样的东西:https://developer.github.com/v3/#authentication但是在我看来它几乎不可能实现调试。我不知道我在这里做错了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

我能做到的唯一方法就是完成整个往返旅程。 我使用了javascript Github API wrapper

幸运的是,我找到了this article,其中大部分工作已经完成。告诉Illia Kolodiazhnyi。

最后。我最终得到了这个:

  • Handler on top of github api plugin
  • 用法:

                var api = new GithubAPI({ token: token});
                            api.setRepo(owner, repo);
                            api.setBranch(branch).then(function () {
                                return api.pushFiles(
                                    'CMS Update',
                                    [
                                        {
                                            content: JsonData,
                                            path: path
                                        }
                                    ]
                                );
                            }).then(function () {
                                console.log('Files committed!');
                            });