【问题标题】:Node.js request abortedNode.js 请求中止
【发布时间】:2019-08-20 12:55:24
【问题描述】:

我正在使用 express 和 body-parser 将大量数据从一台服务器发送到另一台服务器,但一段时间后我收到此异常:

{
    "message": "request  aborted",
    "code": "ECONNABORTED",
    "expected": 99010,
    "length": 99010,
    "received": 96872,
    "type": "request.aborted"
}

是什么原因造成的?如果您需要更多信息,请告诉我。

更新 这是我配置的限制:

application.use(bodyParser.json({ limit: '50mb' }));
application.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));

【问题讨论】:

  • limit 的问题吗?
  • 超时?由于数据量太大?也许您应该考虑流式传输,而不是在一个块中发送所有内容
  • 还可以尝试使用 'DEBUG=body-parser:*' env var 执行您的应用,并检查正文解析器日志中是否存在内部警告/错误。
  • @Agustin,你解决了这个问题吗?我得到了同样的错误。
  • 我发现了这条评论:github.com/expressjs/body-parser/issues/…

标签: javascript node.js express body-parser


【解决方案1】:

这是 body-parser 使用的原始正文引发的异常

来自 express-docs:

请求中止 当请求被中止时会发生此错误 客户端在阅读正文之前已经完成。收到的财产 将设置为请求之前接收到的字节数 中止,并且期望的属性设置为期望的数量 字节。 status 属性设置为 400,type 属性设置为 'request.aborted'。

例如,如果您想处理从正文解析器抛出的所有请求

  'encoding.unsupported',
    'entity.parse.failed',
    'entity.verify.failed',
    'request.aborted',
    'request.size.invalid',
    'stream.encoding.set',
    'parameters.too.many',
    'charset.unsupported',
    'encoding.unsupported',
    'entity.too.large'

使用这个中间件

$ npm i express-body-parser-error-handler

然后简单地在你的 body-parser 初始化之后直接放它

const bodyParserErrorHandler = require('express-body-parser-error-handler')
...
...

application.use(bodyParser.json({ limit: '50mb' }));
application.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
application.use(bodyParserErrorHandler());
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2017-06-06
    • 2013-10-14
    相关资源
    最近更新 更多