javascript - JavaScript Azure Function 中的 if 语句不起作用

标签 javascript json azure azure-functions azure-logic-apps

目标

我的公司使用一个外联网平台,让客户可以发布产品增强的“想法”。我们希望在 Slack 中发布这些想法的通知。 Extranet 平台不提供创意 Webhook。它确实提供了一个想法 API。但是,它没有提供查询两个时间戳之前、之后或之间创建的想法的方法。创意 API 确实以时间戳形式返回创意创建日期,如下所示:2018-11-13T02:03:31.583。它还返回发布创意的作者姓名和创意文本。

我能想到的最佳解决方案是使用 Azure 逻辑应用程序:

  • 每天轮询一次创意 API 以获取最新的 X 个创意
  • 对于每个想法,将返回的 JSON 对象的创建日期、作者和文本字段推送到 Azure 函数(代码如下)
  • Azure 函数将创建日期字段与今天的日期进行比较
  • 如果日期匹配,Azure 函数会将作者和文本字段发送回 Azure 逻辑应用以发送到 Slack
  • 如果日期不匹配,Azure Function 不会执行任何操作

代码

输入

(我在 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 Function 不再返回错误。但是,它不会在输出中返回 JSON 字段。

但我很高兴能够更接近一步。

编辑2

Azure 函数中的 function.json:

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

最佳答案

根据当前 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();
};

关于javascript - JavaScript Azure Function 中的 if 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53753338/

相关文章:

javascript - 这个 CSS 渲染是如何阻塞的?

php - 单击按钮后加载 json

c++ - 从 qjsonarray 中删除大括号并从文档中替换方括号

java - 使用 Jackson 从 POJO 数组生成 JSON 模式

android - 如何在android中解析JSON(二维)数组对象?

Azure 表存储和缓存

javascript - 如何从mongodb中选择一个字段不等于某一值的所有文档

Azure B2C 和登录提示

azure - 如何在 Azure API 管理策略表达式中使用 RSA SHA256 签署 JWT?

javascript - 如何更新登录 Chrome 控制台的变量