目标
我的公司使用一个外联网平台,让客户可以发布产品增强的“想法”。我们希望在 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/