3

尝试使用 express 将大文件上传到节点 js 实例,但会因大文件而失败。带有以下错误消息:

Error: Request aborted
at IncomingMessage.<anonymous> (/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js:107:19)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at abortIncoming (http.js:1892:11)
at Socket.serverSocketCloseListener (http.js:1904:5)
at Socket.EventEmitter.emit (events.js:117:20)
at TCP.close (net.js:466:12)
/server/upload/

buffer.js:194
  this.parent = new SlowBuffer(this.length);
                ^
RangeError: length > kMaxLength
    at new Buffer (buffer.js:194:21)
    at fs.js:220:16
    at Object.oncomplete (fs.js:107:15)
31 Jul 14:01:04 - [nodemon] app crashed - waiting for file changes before starting...

当我不想分块数据时,我能做些什么来防止这个错误?

希望有人可以帮助解决;-)

4

1 回答 1

1

如果分析错误信息

buffer.js:194
   this.parent = new SlowBuffer(this.length);
            ^
RangeError: length > kMaxLength

您可以看到 kMaxLength 是一个常量,它指定了进程的内存限制。
来自https://github.com/joyent/node/wiki/FAQ

目前,默认情况下,v8 在 32 位系统上的内存限制为 512mb,在 64 位系统上为 1gb。可以通过将 --max-old-space-size 设置为最大 ~1gb(32 位)和 ~1.7gb(64 位)来提高限制,但建议您将单个进程拆分为多个 worker如果你达到内存限制。

所以你可以使用标志执行节点

node --max-old-space-size=2000 app.js

标志单位以 MB 为单位,请参阅 ( https://github.com/joyent/node/blob/master/deps/v8/ChangeLog )

于 2013-08-10T13:07:17.967 回答