Запрос Fetch Post не работает в надстройке Office Custom functions [TypeError: Ошибка сетевого запроса]

Я столкнулся с этой ошибкой в ​​надстройке пользовательских функций excel, где я пытаюсь вызвать внешнюю службу внутри пользовательской функции. Он отлично работает для запроса GET, например:

function stockPrice(ticker) {
var url = "https://api.iextrading.com/1.0/stock/" + ticker + "/price";
return fetch(url)
    .then(function(response) {
        return response.text();
    })
    .then(function(text) {
        return parseFloat(text);
    });
}

CustomFunctionMappings.STOCKPRICE = stockPrice;

Взято из https://docs.microsoft.com/en-us/office/dev/add-ins/excel/excel-tutorial-custom-functions#create-a-custom-function-that-requests-data-from-the-web

Но дает исключение для запроса POST следующим образом:

function stockPrice(ticker) {
var url = "https://westcentralus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment";
return fetch(url, {
        method: 'POST',
        headers: {
            'Ocp-Apim-Subscription-Key': key,
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        },
        body: JSON.stringify(body))
    .then(function(response) {
        return response.json();
    })
    .then(function(response) {
        return response.somevalue;
    })
    .catch(e => {
        console.error("Caught exception");
        return JSON.stringify(e);
     });
}

Вышеупомянутое - это всего лишь образец, чтобы понять, как я звоню в свою службу. Я пробовал это с 2-3 различными службами и понял, что после запуска fetch код переходит в блок catch, а значение ошибки, возвращаемое в excel, является пустым объектом '{}'. Поскольку нет способов отлаживать пользовательские функции в Windows, и поскольку нет конкретного описания ошибки, я не могу понять проблему. Я также добавил свой служебный домен в список доменов приложения в файле манифеста, но все еще безрезультатно.


person Zohaib    schedule 30.10.2018    source источник


Ответы (1)


Я не уверен, что конкретный API принимает запросы POST, так что вы, возможно, столкнетесь с этим.

Отладка в Windows все еще продолжается, но вы можете использовать Excel онлайн и F12tools для отладки.

Если вы работаете в Windows, вы можете использовать операторы console.log в сочетании с ведением журнала во время выполнения: https://docs.microsoft.com/en-us/office/dev/add-ins/excel/custom-functions-best-practices#troubleshooting

Надеюсь, что это поможет, и мы обновим это, когда будет готова отладка для пользовательских функций на рабочем столе Windows.

person Keyur Patel - MSFT    schedule 31.10.2018
comment
Я отредактировал вопрос в исходном запросе и попытался выполнить отладку с помощью журнала времени выполнения, и я получаю следующую ошибку: [TypeError: Ошибка сетевого запроса]. Не могли бы вы объяснить, почему у меня возникает эта проблема, когда я могу успешно запустить ту же службу из других частей надстройки, но получаю эту ошибку только в случае пользовательских функций. - person Zohaib; 31.10.2018
comment
В приведенном выше коде есть ошибка, т.е. здесь отсутствует фигурная скобка; тело: JSON.stringify (тело)). - person Keyur Patel - MSFT; 31.10.2018
comment
Пожалуйста, не обращайте внимания на ошибку скобок, это просто произошло при копировании, извините! Примерно та же политика происхождения, о которой вы упомянули. Это не влияет на запросы GET? потому что я могу успешно вызывать запросы GET из пользовательских функций для служб, работающих на серверах с разным происхождением! - person Zohaib; 31.10.2018
comment
Я бы проверил эту тему для получения дополнительной информации о той же политике происхождения и CORS: developer.mozilla.org/en-US/docs/Web/Security/. Вероятно, это зависит от политики доступа поставщика API. - person Keyur Patel - MSFT; 31.10.2018