NODE-RED (Error: Cannot set headers after they are sent to the client) multiple devices sending request

NODE-RED (Error: Cannot set headers after they are sent to the client) multiple devices sending request

我通过 http 连接使用 IBM 云 AI 在 node-red 上创建了一个聊天机器人流,我遇到了以下问题,当在不同的 chats/accounts 中同时发送消息时,出现此错误:“错误:发送给客户端后无法设置 headers”。 我知道这与它不能被覆盖的请求有关。 但是,如何让多个设备访问同一个流而不干扰已经在进行中的请求呢?

我正在模拟通过 facebook messenger 和 instagram 发送消息

感谢抽空

最后一个更改节点意味着您将 msg.res 字段存储在某处并将其放回原处。

我猜你正在使用相同的上下文变量来执行此操作,所以它会被第二次调用覆盖,所以这两个事件都尝试在最后一个 msg.res 上响应,而第二个失败,因为它们可以只能使用一次

如果流中的所有节点都正常运行并且没有丢弃 msg 属性,则不需要执行此操作。如果有节点丢弃属性,那么您应该向它的作者提出问题以修复它。

与此同时,您需要确保每次调用都跟踪它自己的 msg.res,这可能意味着将它存储在一个唯一的 ID 下(可能 msg._id 但如果一个节点正在丢弃属性,这可能也改变)到他们都响应正确的会话。

正如@hardillb 所说,错误的原因是您的流程在切换节点处分叉。这意味着当只允许一个时,您将两个 http 响应发送回调用客户端。

Watson Assistant 节点将其响应放在 msg.payload 中,它不会重置、更新或删除任何其他字段。

我怀疑您不需要分叉,在这种情况下,您可以将流从 set msg.res 传递到模板和函数节点。

您的分叉可能唯一需要保留的是 msg.payload,在这种情况下,您可以将其保存在流上下文中,或者保存在其他 msg 字段中,例如。 msg.mypayload.