You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED中forEach循环构建HTTP批量请求的分号语法问题

问题

我正尝试在Node-RED中创建一个forEach循环来构建HTTP批量请求,要求负载格式为JSON对象,但我的函数节点持续提示在forEach循环末尾需要使用分号而非冒号。我知道这大概率是个低级错误,但始终找不到问题所在。

var ipaddr =        msg.payload.ipddr[0]
var credentials = msg.payload.auth[0]
var base64 = new Buffer(credentials).toString('base64')

const nameArray = msg.payload.nameArray
const descriptionArray = msg.payload.descriptionArray
const areaArray = msg.payload.areaArray
const useTypeArray = msg.payload.useTypeArray
const addressArray = msg.payload.addressArray
const yearBuiltArray = msg.payload.yearBuiltArray

var createMsg = {};

createMsg.method = "POST";
createMsg.headers = {};
createMsg.headers['authorization'] = 'basic ' + base64;
createMsg.headers['Content-Type'] = "application/JSON";
createMsg.url = "https://" + ipaddr + "/v2/batch";
 
var body =
  {
      "requests":[
          nameArray.forEach((y, i) => {
            {
              "id": nameArray[i]
              "url": "/api/rest/v2/services/site/buildings/" + nameArray[i]
              "key": name
              "use-type": useTypeArray[i]
              "area": areaArray[i]
              "address": addressArray[i]
              "description": descriptionArray[i]
              "year-built": yearBuiltArray[i]
            },
          }
        )
      ]
  };
createMsg.payload = body;
node.send(createMsg);
return null;

我原本预期像"area": areaArray[i]这样的写法是可行的。

解决方法

你的代码存在几个语法和逻辑错误,逐一修正如下:

  • forEach无法直接生成数组元素:forEach仅用于遍历数组执行回调操作,返回值是undefined,不能直接用来填充requests数组。改用map方法,它会遍历数组并返回新数组,正好用来构建批量请求的每一项。
  • 对象属性间缺少逗号:每个请求对象里的键值对结尾未添加逗号,比如"id": nameArray[i]后必须加逗号,否则会触发语法错误。
  • 未定义变量name:代码中"key": name的name变量未定义,应替换为nameArray[i](或直接使用map回调的name参数)。
  • Buffer构造函数已废弃:Node.js中new Buffer()已被废弃,换成Buffer.from()可避免运行时警告。

修正后的代码:

var ipaddr = msg.payload.ipddr[0];
var credentials = msg.payload.auth[0];
var base64 = Buffer.from(credentials).toString('base64');

const nameArray = msg.payload.nameArray;
const descriptionArray = msg.payload.descriptionArray;
const areaArray = msg.payload.areaArray;
const useTypeArray = msg.payload.useTypeArray;
const addressArray = msg.payload.addressArray;
const yearBuiltArray = msg.payload.yearBuiltArray;

var createMsg = {};

createMsg.method = "POST";
createMsg.headers = {};
createMsg.headers['authorization'] = 'basic ' + base64;
createMsg.headers['Content-Type'] = "application/json";
createMsg.url = "https://" + ipaddr + "/v2/batch";
 
var body = {
    "requests": nameArray.map((name, i) => ({
        "id": name,
        "url": "/api/rest/v2/services/site/buildings/" + name,
        "key": name,
        "use-type": useTypeArray[i],
        "area": areaArray[i],
        "address": addressArray[i],
        "description": descriptionArray[i],
        "year-built": yearBuiltArray[i]
    }))
};
createMsg.payload = body;
node.send(createMsg);
return null;

内容的提问来源于stack exchange,提问作者CarnegieBaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:45:51