来自不抛出标准异常的节点的 Node-RED 处理错误

Node-RED Handle error from node that throws no standardexception

我想使用Pushover Node 发送通知。我已经通过 curl 使用它有一段时间了,很少有消息不发送。这就是为什么我在 bash

echo "$curlOutput" | grep -qP '{"status":1' 
if [ ! $? -eq 0 ] 
then
    echo "" | mail --append "Content-Type: text/plain; charset=UTF-8" -s "" name@company.com
fi

捕获错误,然后通过电子邮件发送消息。

现在我想在 Node-Red 中做一些类似的事情。出于测试目的,如果通过 sudo iptables -A OUTPUT -d 104.20.0.0/16 -m comment --comment "Pushovertest" -j REJECT

模拟网络错误

成功拦截。在 node-red-log 中我看到

18 May 13:46:24 - [error] [pushover:252a17dc.1239d8] Error: connect ECONNREFUSED 104.20.125.71:443

现在看看这个 Node-RED 流程

错误显示在调试 window 中并且来自 pushover 节点。 catch 节点没有捕获到 expectation,显然是因为 pushover 没有使用异常框架 https://developer.ibm.com/recipes/tutorials/nodered-exception-handling-framework/

第一个测试通过:记录了一个错误。但是在这种情况下,我该如何对 Node-RED 中的这个错误做出反应以执行其他操作?

我从源代码中猜测错误来自第 10357-pushover.js 文件。

此行对 node.error() 的调用不会推送传入的 msg 对象,因此不会将其传递到 catch 节点。 node.error() 函数有 2 个签名,第一个只接受错误消息,第二个接受错误消息和传入的 msg 对象,只有第二个转发错误和 msg 对象被传递到catch节点。

请随时提交拉取请求以更新此节点。