NodeJS Express请求实体过大

6

我曾尝试过许多解决方案(如增加内存限制、添加参数limit、将type设为“application/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以解决此问题。
此外,https://github.com/elastic/elasticsearch/issues/2902提供了更多关于此错误的信息。
此问题已得到解决。感谢所有的帮助!

尝试删除此行代码:app.use(bodyParser()) - Devang Naghera
1
永远不应该发送那么多数据。您应该分块发送数据以避免超时,就像通过YouTube的API上传视频时一样。请参阅https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol 在我们的应用程序中,我们以50Mb为单位上传。 - Ruan Mendes
1
我是读错了吗?还是你想在一个请求中发送15360 MB的数据? - gokcand
你使用的ES版本是什么?请参考这里:https://github.com/elastic/elasticsearch/issues/2902 获取旧版本的ES。顺便提一下,如果不优化批量请求,你将削弱性能。 - ryanlutgen
嗨,我正在使用Node.js,但找不到elasticsearch.yml文件。在哪里需要设置http.max_content_length:500mb?我可以看到export interface ConfigOptions中有一些属性,例如host、hosts、requestTimeout、ssl、deadTimeout等。 - Arvind
显示剩余9条评论
1个回答

3
如果您解决不了问题,bodyParser还有限制。请注意使用。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接