Reputation: 383
I got the following error with 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)
the code is following
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;
};
It seems similar to this question
So I tried these 3 solutions.
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' }));
but the result didn't change.
another setting is like below
nginx has this setting : client_max_body_size 200M;
data size is under 500kb (json).
express : 4.15.3
body-parser : 1.18.2
I have no idea why I can't change limit data size.
Upvotes: 38
Views: 59510
Reputation: 1
Whilst it would be nice NOT to have to modify the body-parser library code directly, this is also the only way this worked for me. The maintenance of this is nominal for THIS instance, but moving servers etc etc and this becomes bad software very quickly.
var limit = typeof opts.limit !== 'number'
? bytes.parse(opts.limit || '16Mb')
: opts.limit
Line 56 node_modules/body-parser/lib/types/json.js
Upvotes: 0
Reputation: 864
My issue was because I had
app.use(express.json())
and also
app.use(bodyParser.json({ limit: "50mb" }))
and
app.use(bodyParser.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }))
I solved it after removing app.use(express.json())
. Hope it helps somebody with the same issue.
Upvotes: 83
Reputation: 577
Controlling the maximum request body size will do the trick, however, you do not need body-parser anymore. Instead of using body-parser middleware, use the new Express implementation:
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb', extended: true, parameterLimit: 50000}));
You can find here the complete documentation.
Upvotes: 23
Reputation: 67
None of them works for me I couldn't change the limit by writing these
app.use(express.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }))
app.use(express.json({ limit: "50mb", extended: true, parameterLimit: 50000 }))
You can change the limit from node_modules\body-parser\lib\types\json.js
? bytes.parse(opts.limit || '100kb') to ? bytes.parse(opts.limit || '50mb')
Upvotes: 5