PayloadTooLargeError:请求实体太大

ya9*_*net 4 javascript http node.js express

我在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)
Run Code Online (Sandbox Code Playgroud)

代码如下

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;
};
Run Code Online (Sandbox Code Playgroud)

似乎与此问题类似

所以我尝试了这三种解决方案。

1。

app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
Run Code Online (Sandbox Code Playgroud)

2。

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

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' }));
Run Code Online (Sandbox Code Playgroud)

但结果没有改变。

另一个设置如下

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

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

ric*_*ick 21

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

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

您可以在这里找到完整的文档。


小智 9

我的问题是因为我曾经app.use(express.json())也曾经

app.use(bodyParser.json({ limit: "50mb" }))
Run Code Online (Sandbox Code Playgroud)

app.use(bodyParser.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }))
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

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

您可以从node_modules\body-parser\lib\types\json.js更改限制

? bytes.parse(opts.limit || '100kb') to  ? bytes.parse(opts.limit || '50mb')
Run Code Online (Sandbox Code Playgroud)