记住 Node-RED 自定义节点中的回调函数
Remembering a callback function in a Node-RED custom node
在 Node-RED 中,我们可以创建自定义节点。这些执行开箱即用的预提供节点不提供的特定工作。有许多社区提供了这些实例。自定义节点可能希望处理某种新形式的输入事件。让我们想象一下,我们有一种名为 2TinCans(2 个锡罐由一根绳子连接)的新网络技术。如果我们希望使用它来处理 request/response,我们可能会创建两个新的 Node-RED 节点……一个用于处理输入(请求),一个用于处理输出(响应)。当请求到达时,Node-RED 中的 2TinCans 服务器 运行 已经在侦听传入请求。当收到请求时,节点向下游发送一条新消息。最终,这将到达一个 2TinCans 响应节点,该节点负责将响应发送回相应的原始请求。
问题来了...我们如何维护此对话的 "state" 以便响应节点知道将响应发送给正确的伙伴?
我们需要维护源自原始传入请求节点的状态和信息,供最终响应节点使用。
在 Node-RED 环境中,我们有许多上下文对象,包括每个节点一个上下文、每个流一个上下文和一个全局上下文。但是,体系结构不允许将这些用于我们的目的。本地节点上下文对我们没有用,因为它会保存传入请求节点的上下文,但响应节点无法寻址。流上下文和全局上下文都是 "singletons" ...这意味着我们保存在那里的任何数据都会被下一次调用覆盖。由于原则上可能有许多并发流正在执行,我们可以想象同时处理两个并行请求并且它们会相互踩踏对方的响应。
将正确的状态信息传递给下游响应节点的正确方法是将该信息添加到沿线路传输的消息 (msg
) 中。这可以是 属性 的形式,它是响应节点可以调用以完成对话的回调 JavaScript 对象。
在 Node-RED 中,我们可以创建自定义节点。这些执行开箱即用的预提供节点不提供的特定工作。有许多社区提供了这些实例。自定义节点可能希望处理某种新形式的输入事件。让我们想象一下,我们有一种名为 2TinCans(2 个锡罐由一根绳子连接)的新网络技术。如果我们希望使用它来处理 request/response,我们可能会创建两个新的 Node-RED 节点……一个用于处理输入(请求),一个用于处理输出(响应)。当请求到达时,Node-RED 中的 2TinCans 服务器 运行 已经在侦听传入请求。当收到请求时,节点向下游发送一条新消息。最终,这将到达一个 2TinCans 响应节点,该节点负责将响应发送回相应的原始请求。
问题来了...我们如何维护此对话的 "state" 以便响应节点知道将响应发送给正确的伙伴?
我们需要维护源自原始传入请求节点的状态和信息,供最终响应节点使用。
在 Node-RED 环境中,我们有许多上下文对象,包括每个节点一个上下文、每个流一个上下文和一个全局上下文。但是,体系结构不允许将这些用于我们的目的。本地节点上下文对我们没有用,因为它会保存传入请求节点的上下文,但响应节点无法寻址。流上下文和全局上下文都是 "singletons" ...这意味着我们保存在那里的任何数据都会被下一次调用覆盖。由于原则上可能有许多并发流正在执行,我们可以想象同时处理两个并行请求并且它们会相互踩踏对方的响应。
将正确的状态信息传递给下游响应节点的正确方法是将该信息添加到沿线路传输的消息 (msg
) 中。这可以是 属性 的形式,它是响应节点可以调用以完成对话的回调 JavaScript 对象。