NodeJS 超过最大调用堆栈大小

7d7tgy0s  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(119)

我有一个正则表达式需要检查base64是否有效。目前我在NodeJS中的代码看起来像这样:

let base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
if (base64regex.test(Payload.fileData) === true) {
 //Further process the filedata
}

字符串
对于不超过1.6MB的较小base64文件,正则表达式工作正常,但对于较大的文件(>2MB),它会导致:

RangeError: Maximum call stack size exceeded
    at RegExp.test (<anonymous>)


如何接受更大的base64数据而不会导致堆栈大小超过错误?
我在stackoverflow上看到了一些例子,但没有一个遇到过这个问题。base64regex.test()调用是递归发生的吗?如果是,我该如何解决这个问题?

u4dcyp6a

u4dcyp6a1#

而不是RegExp -这可能会导致 * 最大调用堆栈大小 * 问题,如this one
您可以尝试使用另一种方法,例如:

const isValidBase64 = b => {
  try {
    return b.length > 3 && !(b.length % 4) && atob(b) && true;
  } catch(err) {
    return false;
  }
}

// Example:
console.log(
  isValidBase64(""),         // false
  isValidBase64("a"),        // false
  isValidBase64("aZ="),      // false
  isValidBase64("aZ+9===="), // false
  isValidBase64("aZ+9/Š=="), // false
  isValidBase64("aZ+9"),     // true
  isValidBase64("aZ+9/B=="), // true
);

字符串
(使用大小> 18 Mb的图像进行测试)

相关问题