消息钩子允许在节点之间的消息传递路径中添加自定义代码。
以下图表显示了消息传递路径中可用的钩子集。

send 并发送了一个或多个消息。onSend一个节点调用了 node.send() 并发送了一个或多个消息。
该钩子传递了一个包含 SendEvent 对象的数组。这些对象中的消息正是节点传递给 node.send 的内容 - 这意味着可能会有对同一消息对象的重复引用。
此钩子应该同步完成,以避免意外行为。
如果它需要进行异步工作,必须 克隆并替换它接收到的事件中的消息对象。它必须 还要将 cloneMessage 属性设置为 false,以确保之后不会在该消息上发生克隆。
如果钩子返回 false,消息将不再继续处理。
// 示例同步 onSend 钩子
RED.hooks.add("onSend", (sendEvents) => {
    console.log(`发送 ${sendEvents.length} 条消息`);
});
preRoute一条消息即将被路由到其目的地。
该钩子传递一个单一的 SendEvent。
此钩子应该同步完成,以避免意外行为。
如果它需要进行异步工作,必须 克隆并替换它接收到的事件中的消息对象。它必须 还要将 cloneMessage 属性设置为 false,以确保之后不会在该消息上发生克隆。
如果钩子返回 false,消息将不再继续处理。
// 示例异步 preRoute 钩子
RED.hooks.add("preRoute", (sendEvent, done) => {
    // 由于此钩子需要进行异步工作,如果需要,则克隆消息
    if (sendEvent.cloneMessage) {
        sendEvent.msg = RED.util.cloneMessage(sendEvent.msg);
        sendEvent.cloneMessage = false;
    }
    someAsyncAPI(sendEvent).then(() => {
        done()
    }).catch(err => {
        // 错误意味着停止处理此消息
        done(err);
    })
});
preDeliver一条消息即将被送达。
该钩子传递一个单一的 SendEvent。此时,本地路由器已经识别出要发送的节点,并设置了 SendEvent 的 destination.node 属性。
如果需要,消息将已被克隆。
如果钩子返回 false,消息将不再继续处理。
// 示例 preDeliver 钩子
RED.hooks.add("preDeliver", (sendEvent) => {
    console.log(`即将送达 ${sendEvent.destination.id}`);
});
postDeliver一条消息已被发送到其目的地。
该钩子传递一个单一的 SendEvent。消息是异步传递给钩子执行的。
// 示例 postDeliver 钩子
RED.hooks.add("postDeliver", (sendEvent) => {
    console.log(`消息已发送到 ${sendEvent.destination.id}`);
});
onReceive一条消息即将被某个节点接收。
该钩子传递一个 ReceiveEvent。
如果钩子返回 false,消息将不再继续处理。
// 示例 onReceive 钩子
RED.hooks.add("onReceive", (receiveEvent) => {
    console.log(`消息即将传递给节点: ${receiveEvent.destination.id}`);
});
postReceive一条消息已被某个节点接收。
当消息交给节点的 input 处理程序时,该钩子传递 ReceiveEvent。
// 示例 postReceive 钩子
RED.hooks.add("postReceive", (receiveEvent) => {
    console.log(`接收到消息: ${receiveEvent.msg.payload}`);
});
onComplete一个节点已完成处理一条消息或记录了相关错误。
该钩子传递一个 CompleteEvent。
// 示例 onComplete 钩子
RED.hooks.add("onComplete", (completeEvent) => {
    if (completeEvent.error) {
        console.log(`消息处理完成但发生错误: ${completeEvent.error}`);
    }
});
SendEvent 对象{
    "msg": "<消息对象>",
    "source": {
        "id": "<节点-id>",
        "node": "<节点-对象>",
        "port": "<正在发送的端口索引>"
    },
    "destination": {
        "id": "<节点-id>",
        "node": undefined
    },
    "cloneMessage": "true|false"
}
ReceiveEvent 对象{
    "msg": "<消息对象>",
    "destination": {
        "id": "<节点-id>",
        "node": "<节点-对象>"
    }
}
CompleteEvent 对象```json { “msg”: “<消息对象>", "node": { "id": "<节点-id>", "node": "<节点-对象>" }, "error": "<传递给 done 的错误,否则为 undefined>" }节点-对象>节点-id>消息对象>
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 拥有并使用注册商标。有关 OpenJS Foundation 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS Foundation 商标列表 中列出的商标和徽标是其各自持有者的商标™或注册商标®。使用它们并不意味着与它们有任何关联或认可。
OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS Foundation 章程 | 商标政策 | 商标列表 | Cookie 政策