【问题标题】:NodeJS Express Request Entity Too LargeNodeJS Express 请求实体太大
【发布时间】:2018-06-10 15:03:40
【问题描述】:

我尝试了此处列出的许多解决方案(增加内存限制、添加参数限制、添加类型为“应用程序/json”)来修复此“请求实体太大”错误(它还返回 http 代码 413)。但他们似乎都没有让这个错误消失。

json 的当前大小可以从 200k 到 400k 个实体。

这是当前配置:

app.use( bodyParser.json({limit: "15360mb", type:'application/json'}) );      
app.use(bodyParser.urlencoded({
  limit: "15360mb",
  extended: true,
  parameterLimit:5000000,
  type:'application/json'
})); 
app.use(bodyParser())

关于如何增加限制的任何想法?

更多信息

如果有帮助,这是完整的错误消息:

    { Error: Request Entity Too Large
        at respond (/home/nodejs/server/node_modules/elasticsearch/src/lib/transport.js:307:15)
        at checkRespForFailure (/home/nodejs/server/node_modules/elasticsearch/src/lib/transport.js:266:7)
        at HttpConnector.<anonymous> (/home/nodejs/server/node_modules/elasticsearch/src/lib/connectors/http.js:159:7)
        at IncomingMessage.bound (/home/nodejs/server/node_modules/lodash/dist/lodash.js:729:21)
        at emitNone (events.js:111:20)
        at IncomingMessage.emit (events.js:208:7)
        at endReadableNT (_stream_readable.js:1056:12)
        at _combinedTickCallback (internal/process/next_tick.js:138:11)
        at process._tickCallback (internal/process/next_tick.js:180:9)
      status: 413,
      displayName: 'RequestEntityTooLarge',
      message: 'Request Entity Too Large',
      path: '/_bulk',
      query: {},
      body: '<large body here>'
}

解决方案

错误确实是由于elasticsearch上的错误配置而不是nodejs。通过关注https://github.com/elastic/elasticsearch-js/issues/241 并在elasticsearch.yml 中设置http.max_content_length: 500mb 来设法解决此问题。

@ryanlutgen 还在此处提供了有关此错误的更多信息的链接。 https://github.com/elastic/elasticsearch/issues/2902

此问题已修复。感谢您的所有意见!

【问题讨论】:

  • 尝试删除此行app.use(bodyParser())
  • 你永远不应该发送那么多数据。您应该分块发送数据以避免超时,例如当您通过 YouTube 的 API 上传视频时。请参阅developers.google.com/youtube/v3/guides/… 在我们的应用程序中,我们上传 50Mb 块
  • 没有最后一行,同样的错误仍然发生。我补充说希望错误能得到解决,但遗憾的是没有
  • 如果可以的话,我会分块发送。但由于设置的限制,不幸的是我不能这样做。如果它在200k-300k~,节点可以处理它,但是一旦它达到400k,就会发生错误。或者nodejs可以将json分成块吗?如果可以,它可能会起作用。
  • 我读错了吗?或者您只想在一个请求中发送 15360 MB 数据?

标签: javascript node.js express elasticsearch


【解决方案1】:

如果你没有解决你的问题,bodyParser 还有一个limit。 你必须使用

app.use(bodyParser({limit: '4MB'}))

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2021-11-12
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2016-02-10
    • 2019-03-17
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多