Оператор if внутри функции JavaScript Azure не работает

Цель

Моя компания использует платформу экстрасети, которая позволяет клиентам публиковать «идеи» для улучшения продукта. Мы хотели бы публиковать уведомления об этих идеях в Slack. Платформа экстранета не предлагает веб-перехватчиков для идей. Он предлагает API идей. Однако он не предлагает способа запроса идей, созданных до, после или между двумя отметками времени. API идей возвращает дату создания идеи в виде отметки времени, например: 2018-11-13T02:03:31.583. Он также возвращает имя автора, опубликовавшего идею, и текст идеи.

Лучшее решение, которое я могу придумать, - использовать приложение Azure Logic, которое:

  • Опрашивает API идей для получения последних X идей один раз в день.
  • Для каждой идеи отправляет дату создания, автора и текстовые поля возвращенного объекта JSON в функцию Azure (код приведен ниже).
  • Функция Azure сравнивает поле даты создания с сегодняшней датой.
  • Если даты совпадают, функция Azure отправляет поля автора и текстовые поля обратно в приложение Azure Logic для отправки в Slack.
  • Если даты не совпадают, функция Azure ничего не делает.

Код

Вход

(Я оставил другие метаданные идеи в JSON, такие как автор и текст, чтобы упростить свой вопрос)

{
    "date": "2018-12-12T17:34:07.693"
}

Функция Azure index.js

module.exports = function (context, data) {
    var ideaDate = data.body;

    var ideaDate2 = JSON.stringify(ideaDate);
    var ideaDate3 = JSON.parse(ideaDate2);
    var ideaDate4 = ideaDate3.date;
    // Extract date only
    var ideaDate5 = ideaDate4.substring(0, 10);

    // Get today's date
    var todaysDate = new Date();
    var localDate = new Date(todaysDate);
    var localDate1 = localDate.toISOString().toString()
    // Extract date only
    var localDate2 = localDate1.substring(0, 10);


    ///PROBLEMATIC LINE
    if (new String(ideaDate5).valueOf() === new String(localDate2).valueOf()) {

        // Response of the function to be used later
        context.res = {
            body: {
                ideaDate,
                ideaDate2,
                ideaDate3,
                ideaDate4,
                ideaDate5,
                todaysDate,
                localDate,
                localDate1,
                localDate2
            }
        };
    }

    context.done();
};

Вывод

500: Internal Service Error

Успешный вывод без проблемной строки оператора if

Я включаю все переменные в вывод, чтобы продемонстрировать, что происходит при запуске скрипта.

{
    "ideaDate": {
        "date": "2018-12-12T17:34:07.693"
    },
    "ideaDate2": "{\"date\":\"2018-12-12T17:34:07.693\"}",
    "ideaDate3": {
        "date": "2018-12-12T17:34:07.693"
    },
    "ideaDate4": "2018-12-12T17:34:07.693",
    "ideaDate5": "2018-12-12",
    "todaysDate": "2018-12-12T23:51:26.110Z",
    "localDate": "2018-12-12T23:51:26.110Z",
    "localDate1": "2018-12-12T23:51:26.110Z",
    "localDate2": "2018-12-12"
}

Я новичок в JavaScript

Благодарим вас за любой совет, который обнаруживает проблему или полностью рекомендует лучший процесс.

Редактировать

Спасибо ABOS за указание на то, что выражение if должно заключаться в круглые скобки. Я добавил их в код, напечатанный выше. Функция Azure больше не возвращает ошибку. Однако он не возвращает поля JSON в выводе.

Но я очень благодарен за возможность быть на шаг ближе.

Редактировать 2

function.json в функции Azure:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

person hcdocs    schedule 13.12.2018    source источник
comment
вы должны использовать круглые скобки в выражении if: if (...) {}   -  person ABOS    schedule 13.12.2018
comment
Что ж, это было легко. Большое спасибо ABOS   -  person hcdocs    schedule 13.12.2018
comment
it does not return the JSON fields in the output Вы имеете в виду, что не получаете ответ Json в приложении Logic или что? Не могли бы вы показать function.json?   -  person Jerry Liu    schedule 13.12.2018
comment
Добавил в вопрос, Джерри Лю - спасибо, что посмотрели   -  person hcdocs    schedule 13.12.2018
comment
@hcdocs Ваш код работает на моей стороне. Если вы по-прежнему используете 2018-12-12T17:34:07.693 во входных данных, он не будет выполнять сегмент if, поскольку время UTC сейчас 12-13.   -  person Jerry Liu    schedule 13.12.2018
comment
@Jerry Liu Вы были совершенно правы, что я использовал неправильную дату. Теперь он работает так, как ожидалось, как на панели журнала функции, так и в приложении логики. Спасибо, что указали мне правильное направление.   -  person hcdocs    schedule 13.12.2018
comment
@hcdocs Рад, что проблема решена. Вы не возражаете, я отправлю ответ, чтобы закрыть ваш вопрос, включая некоторые улучшения для вашего js-кода?   -  person Jerry Liu    schedule 13.12.2018
comment
@Jerry Liu Я был бы очень признателен за это и отмечу это правильно   -  person hcdocs    schedule 13.12.2018


Ответы (1)


Измените дату ввода в соответствии с текущим временем в формате UTC, и код должен вернуть тело JSON, как ожидалось. И некоторые улучшения для вашего кода.

module.exports = function (context, data) {
    var ideaDate = new Date(data.body.date).toISOString().substring(0, 10);
    var todaysDate  = new Date().toISOString().substring(0, 10);

    if (ideaDate === todaysDate) {

        context.res = {
            body: {
               ideaDate,
               todaysDate
            }
        };
    }

    context.done();
};
person Jerry Liu    schedule 14.12.2018