PayloadTooLargeError:请求实体太大
Posted
技术标签:
【中文标题】PayloadTooLargeError:请求实体太大【英文标题】:PayloadTooLargeError: request entity too large 【发布时间】: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());。我可以用这条线解决这个问题。谢谢。 【参考方案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())
后解决了这个问题。希望它可以帮助遇到同样问题的人。
【讨论】:
嗨,欢迎来到 ***。太好了,您找到了答案!下次把你的代码放在一个代码块中,这样更容易阅读以上是关于PayloadTooLargeError:请求实体太大的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Firestore onSnapshot PayloadTooLargeError:Expo / React Native 项目上的请求实体太大