首页 > 解决方案 > 如何将基于 http 请求参数构建的自定义对象附加到 node-red 中的全局上下文数组?

问题描述

在 nodered 中,我想将 JSON 对象添加到存储在全局上下文对象中的数组中。

全局上下文初始化为

{
 "lot":
    {
         "total":0,
         "free":0,
         "occupied":0,
         "cams":[]
     }
}

当一个 HTTP 请求发生时,我需要将一个对象添加到全局上下文中cams。我尝试使用具有以下 JSONATA的change节点来执行此操作:Set context.lot.cams

$append(global.context.lot.cams, 

        {$string(msg.req.params.cam) :
        {"total" : msg.req.body.totalLots,
        "free" : msg.req.body.totalLots - msg.req.body.occupied,
        "occupied" : msg.req.body.occupied}
        }

)

但是,不是附加它,而是cams用新元素覆盖数组。

如何将使用 http 请求参数构建的自定义对象附加到节点红色的全局上下文数组中?

标签: arraysjsonappendnode-red

解决方案


最简单的方法是使用 Function 节点。根据您分享的内容,以下内容可以做到:

var myData = global.get("context.lot.cams");
var newObj = {};
newObj[msg.req.params.cam] = {
  "total" : msg.req.body.totalLots,
  "free" : msg.req.body.totalLots - msg.req.body.occupied,
  "occupied" : msg.req.body.occupied
};
myData.push(newObj);
global.set("context.lot.cams",newObj);
return msg;

推荐阅读