Javascript 无法创建长度超过0x3fffffe7个字符的字符串
我正在使用请求库(启用了gzip),它因此错误而崩溃 这个错误似乎发生在这条线上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) } 完整堆栈跟
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。它应该能够处理这样大小的字符串,但我也愿意跳过这个字符串。我只是不知道该怎么跳过它。