Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法创建长度超过0x3fffffe7个字符的字符串_Javascript - Fatal编程技术网

Javascript 无法创建长度超过0x3fffffe7个字符的字符串

Javascript 无法创建长度超过0x3fffffe7个字符的字符串,javascript,Javascript,我正在使用请求库(启用了gzip),它因此错误而崩溃 这个错误似乎发生在这条线上 response.body = response.body.toString(self.encoding) 包含该行的范围 response.body = Buffer.concat(buffers, bufferLength) if (self.encoding !== null) { response.body = response.body.toString(self.encoding) } 完整堆栈跟

我正在使用请求库(启用了gzip),它因此错误而崩溃

这个错误似乎发生在这条线上

response.body = response.body.toString(self.encoding)
包含该行的范围

response.body = Buffer.concat(buffers, bufferLength)
if (self.encoding !== null) {
 response.body = response.body.toString(self.encoding)
}
完整堆栈跟踪

Error: Cannot create a string longer than 0x3fffffe7 characters
    at Buffer.utf8Slice (<anonymous>)
    at Buffer.toString (buffer.js:797:17)
    at Request.<anonymous> (/home/proj/node_modules/request/request.js:1128:39)
    at Request.emit (events.js:315:20)
    at IncomingMessage.<anonymous> (/home/proj/node_modules/request/request.js:1076:12)
    at Object.onceWrapper (events.js:421:28)
    at IncomingMessage.emit (events.js:327:22)
    at endReadableNT (_stream_readable.js:1220:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'ERR_STRING_TOO_LONG'
}
错误:无法创建长度超过0x3fffffe7个字符的字符串
在Buffer.utf8Slice()处
在Buffer.toString(Buffer.js:797:17)
应要求。(/home/proj/node_modules/request/request.js:1128:39)
at Request.emit(events.js:315:20)
在收到消息时。(/home/proj/node_modules/request/request.js:1076:12)
在Object.onceWrapper(events.js:421:28)
在IncomingMessage.emit(events.js:327:22)
在endReadableNT(_stream_readable.js:1220:12)
在处理和拒绝时(内部/process/task_queues.js:84:21){
代码:“错误字符串太长”
}
当缓冲区长度超过1073741799个字符时,将其转换为字符串的最佳方法是什么?

我在浏览网站时似乎遇到了一个问题。请求获取的页面大小几乎超过2GB

NodeJS的
Buffer.toString
有1GB的限制,而这个内容远远超过了这个限制

请求库的作者忘记在toString操作中放置catch块

修复方法是在
request.js
文件的第1130行添加如下catch块

  if (self.encoding !== null) {
    try {
      response.body = response.body.toString(self.encoding)
    } catch(e) {
      self.emit('error', e)
    }
  }

这与托尔斯泰的《战争与和平》的篇幅差不多。我们到底在说什么?为什么要创建一个1~2MB的字符串呢?Javascript并不能真正处理这种大小的字符串。事实上,这个错误再清楚不过了。这不是作业的工具。@JaredSmith我没有,但请求库有。我获取你们知道的网站,这些网站的大小很常见,但它无法前进。@something这里是NodeJS。它应该能够处理这样大小的字符串,但我也愿意跳过这个字符串。我只是不知道该怎么跳过它。