【问题标题】:PayloadTooLargeError: request entity too largePayloadTooLargeError:请求实体太大
【发布时间】:2018-10-22 14:33:01
【问题描述】:

bodyParser 出现以下错误:

PayloadTooLargeError: request entity too large
at readStream (/root/server/node_modules/raw-body/index.js:155:17)
at getRawBody (/root/server/node_modules/raw-body/index.js:108:12)
at read (/root/server/node_modules/body-parser/lib/read.js:77:3)
at urlencodedParser (/root/server/node_modules/body-parser/lib/types/urlencoded.js:116:5)
at Layer.handle [as handle_request] (/root/server/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/root/server/node_modules/express/lib/router/index.js:317:13)
at /root/server/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/root/server/node_modules/express/lib/router/index.js:335:12)
at next (/root/server/node_modules/express/lib/router/index.js:275:10)
at jsonParser (/root/server/node_modules/body-parser/lib/types/json.js:118:7)
at Layer.handle [as handle_request] (/root/server/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/root/server/node_modules/express/lib/router/index.js:317:13)
at /root/server/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/root/server/node_modules/express/lib/router/index.js:335:12)
at next (/root/server/node_modules/express/lib/router/index.js:275:10)
at initialize (/root/server/node_modules/passport/lib/middleware/initialize.js:53:5)
at Layer.handle [as handle_request] (/root/server/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/root/server/node_modules/express/lib/router/index.js:317:13)
at /root/server/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/root/server/node_modules/express/lib/router/index.js:335:12)
at next (/root/server/node_modules/express/lib/router/index.js:275:10)
at jsonParser (/root/server/node_modules/body-parser/lib/types/json.js:118:7)

代码如下

const express = require("express");
const bodyParser = require('body-parser');

function setEntity(req, res) {
   // something....
}

module.exports = (app) => {

  const router = new express.Router();

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

  router.use('/set/', (req, res) => {
    setEntity(req, res);
  });

  return router;
};

好像和this question很像

所以我尝试了这 3 个解决方案。

1.

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

2.

app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));

3.

app.use(bodyParser.json({limit:1024*1024*20, type:'application/json'}));
app.use(bodyParser.urlencoded({extended:true,limit:1024*1024*20,type:'application/x-www-form-urlencoding' }));

但结果没有改变。

另一个设置如下所示

nginx has this setting : client_max_body_size 200M;
data size is under 500kb (json).
express : 4.15.3
body-parser : 1.18.2

我不知道为什么我不能更改限制数据大小。

【问题讨论】:

  • 我在另一个文件中找到了 app.use(bodyParser.json());。我可以用这条线解决这个问题。谢谢。

标签: javascript node.js http express


【解决方案1】:

我的问题是因为我有 app.use(express.json()) 以及

app.use(bodyParser.json({ limit: "50mb" }))

app.use(bodyParser.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }))

我在删除app.use(express.json()) 后解决了它。希望它可以帮助遇到同样问题的人。

【讨论】:

  • 第一种情况解决了我的问题。谢谢:)
【解决方案2】:

控制最大请求正文大小可以解决问题,但是,您不再需要 body-parser。不要使用 body-parser 中间件,而是使用新的 Express 实现:

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb', extended: true, parameterLimit: 50000}));

您可以找到here 的完整文档。

【讨论】:

  • 我已经离开bodyParser,但是像这样的小洞需要填补。感谢您帮助填补空白!
【解决方案3】:

它们都不适合我,我无法通过编写这些来更改限制

app.use(express.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }))
app.use(express.json({ limit: "50mb", extended: true, parameterLimit: 50000 }))

您可以从 node_modules\body-parser\lib\types\json.js

更改限制
? bytes.parse(opts.limit || '100kb') to  ? bytes.parse(opts.limit || '50mb')

【讨论】:

    【解决方案4】:

    感谢它确实有效

    app.use(bodyParser.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }))
    

    我在删除app.use(express.json()) 后解决了这个问题。希望它可以帮助遇到同样问题的人。

    【讨论】:

    • 嗨,欢迎来到 stackoverflow。太好了,您找到了答案!下次把你的代码放在一个代码块中,这样更容易阅读
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2022-11-27
    • 2021-12-16
    • 1970-01-01
    • 2012-02-12
    • 2016-11-08
    相关资源
    最近更新 更多