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

APIGEE环境下JS验证IP白名单遇解构默认值不支持编译错误求助

解决JavaScript CIDR验证代码的编译错误

你的编译错误根源是当前使用的jsc引擎不支持数组解构赋值中的默认值语法(也就是你代码里const [range, bits = 32] = cidr.split('/')这行写法)。下面是修复后的代码和说明:

修复方案

把解构赋值的代码替换为手动处理拆分后的结果,手动设置默认值,兼容老版本JS引擎:

const ip4ToInt = ip =>
  ip.split('.').reduce((int, oct) => (int << 8) + parseInt(oct, 10), 0) >>> 0;

const isIp4InCidr = ip => cidr => {
  // 替换原来的解构默认值写法,手动处理拆分结果
  const parts = cidr.split('/');
  const range = parts[0];
  // 若没有指定子网位,默认用32,同时确保bits是数字类型
  const bits = parts[1] ? parseInt(parts[1], 10) : 32;
  
  const mask = ~(2 ** (32 - bits) - 1);
  return (ip4ToInt(ip) & mask) === (ip4ToInt(range) & mask);
};

var whitelistedCidr=['10.0.0.1', '10.1.1.1/21','10.0.0.1'];
var clientIp=getEnv("request.header.X-Forwarded-For");


const isIp4InCidrs = (ip, cidrs) => cidrs.some(isIp4InCidr(ip));
var isInRange=false;
isInRange=isIp4InCidrs(clientIp, whitelistedCidr); 
console.log("Whitelisted IP Test");
console.log(isInRange);

说明

  • 拆分CIDR字符串后,通过判断parts[1]是否存在来决定子网位数值,不存在则使用默认的32
  • 用parseInt(parts[1], 10)确保子网位是数字类型,避免后续位运算出现字符串拼接的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:35:22