Загрузка файла JSON в расширении VSTS

Я пытаюсь написать расширение VSTS, которое должно загружать (и анализировать) файл JSON, но мне трудно найти правильный способ сделать это.

Итак, у меня есть что-то вроде:

VSS.init({
    explicitNotifyLoaded: true,
    usePlatformScripts: true
});

var witClient;
var rules;

VSS.ready(function () {
    require(["fs"], function (fs) {
        rules = JSON.parse(fs.readFileSync("urlMatches.json"));
    })

    VSS.require(["VSS/Service", "TFS/WorkItemTracking/RestClient"], function (VSS_Service, TFS_Wit_WebApi) {
        // Get the REST client
        witClient = VSS_Service.getCollectionClient(TFS_Wit_WebApi.WorkItemTrackingHttpClient);
    });

     // Register a listener for the work item page contribution.
    VSS.register(VSS.getContribution().id, function () {
        return {
            // Called after the work item has been saved
            onSaved: function (args) {
                witClient.getWorkItem(args.id).then(
                    function (workItem) {
                        // do some stuff involving the loaded JSON file...
                    });
            }
        }
    });

    VSS.notifyLoadSucceeded();
});

Я пробовал кучу вариантов этого, но безуспешно. Я даже пробовал использовать jQuery для синхронной загрузки файла, но мой rules оказался неопределенным.

Итак, у меня есть файл urlmatches.json, и мне нужно загрузить его и использовать для заполнения переменной rules, прежде чем я перейду к обработчику onSaved.


person Matt Burland    schedule 15.03.2018    source источник
comment
Что за ошибка детали? Вы устанавливаете, что этот файл может быть адресован в vss-extension.json? ({путь: urlmatches.json, адресуемое: true})   -  person starian chen-MSFT    schedule 16.03.2018
comment
Что ж, при этой конкретной попытке вы получите ошибку GET https://***-internal.gallerycdn.vsassets.io/extensions/***-internal/***-extension/0.1.602/1521212199291/fs.js net::ERR_ABORTED. urlmatches.json установлен как addressable, и я могу получить к нему доступ в браузере по его URL.   -  person Matt Burland    schedule 16.03.2018
comment
Боюсь, вы не можете прочитать файл напрямую, я рекомендую вам получить данные через HTTP-запрос, проверьте мой ответ.   -  person starian chen-MSFT    schedule 19.03.2018


Ответы (1)


Вы можете получить контент через HTTP-запрос, например:

 onSaved: function (args) {
                        console.log("onSaved -" + JSON.stringify(args));
                        var request = new XMLHttpRequest();
                        request.open('GET', 'TestData.txt', true);
                        request.send(null);
                        request.onreadystatechange = function () {
                            if (request.readyState === 4 && request.status === 200) {
                                var type = request.getResponseHeader('Content-Type');
                                console.log(request.responseText);
                            }
                        }
person starian chen-MSFT    schedule 19.03.2018