我写了一个JavaScript来验证客户端IP是否在白名单IP范围内。我弄错了
编译JavaScript jsc://ApiKeyPathValidator.js失败,错误为:编译错误:不支持解构声明中的默认值(ApiKeyPathValidator#323)。行:323,列:23。源代码为:const [range,bits = 32] = cidr.split('/')
下面的JavaScript代码
const ip4ToInt = ip =>
ip.split('.').reduce((int, oct) => (int << 8) + parseInt(oct, 10), 0) >>> 0;
const isIp4InCidr = ip => cidr => {
const [range, bits = 32] = cidr.split('/');
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);
1条答案
按热度按时间5hcedyr01#
const [range, bits = 32]
部分是一个解构声明,而= 32
部分是一个默认值。这是完全有效的JavaScript语法,但显然您正在使用的工具不支持它。用老方法来做吧:
(如果该工具也不支持
??
,您可以使用const bits = 1 in parts ? parts[1] : 32;
或const bits = parts[1] || 32;
,这取决于您将如何使用bits
。旁注:
split
的结果总是一个字符串的数组,所以对于你的代码(以及上面的修改版本),在某些情况下,你的bits
常量将包含一个字符串,而其他时候它将包含一个数字(32
)。通常,最好始终使用其中一个,如果提供的话,可以将parts[1]
解析为number。