Error: request entity too large
Asked Answered
H

31

809

I'm receiving the following error with express:

Error: request entity too large
    at module.exports (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/node_modules/raw-body/index.js:16:15)
    at json (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/json.js:60:5)
    at Object.bodyParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:53:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.cookieParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.logger (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/logger.js:158:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.staticMiddleware [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/static.js:55:61)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
TypeError: /Users/michaeljames/Documents/Projects/Proj/mean/app/views/includes/foot.jade:31
    29| script(type="text/javascript", src="/js/socketio/connect.js")
    30| 
  > 31| if (req.host='localhost')
    32|     //Livereload script rendered 
    33|     script(type='text/javascript', src='http://localhost:35729/livereload.js')  
    34| 

Cannot set property 'host' of undefined
    at eval (eval at <anonymous> (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:152:8), <anonymous>:273:15)
    at /Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:153:35
    at Object.exports.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:197:10)
    at Object.exports.renderFile (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:233:18)
    at View.exports.renderFile [as engine] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:218:21)
    at View.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/view.js:76:8)
    at Function.app.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/application.js:504:10)
    at ServerResponse.res.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/response.js:801:7)
    at Object.handle (/Users/michaeljames/Documents/Projects/Proj/mean/config/express.js:82:29)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:188:17)

POST /api/0.1/people 500 618ms

I am using meanstack. I have the following use statements in my express.js

//Set Request Size Limit
app.use(express.limit(100000000));

Within fiddler I can see the content-length header with a value of: 1078702

I believe this is in octets, this is 1.0787 megabytes.

I have no idea why express is not letting me post the json array I was posting previously in another express project that was not using the mean stack project structure.

Hijacker answered 11/11, 2013 at 22:40 Comment(1)
quick note on this to anyone coming to this question - make sure your issue is actually the node server or body parser. For example I'm using body parser correctly but I got this error because I for to set the max body size in the NGINX conf file.Hovel
J
1563

I had the same error recently, and all the solutions I tried did not work.

After some digging, I found that setting app.use(express.bodyParser({limit: '50mb'})); did set the limit correctly.

When adding a console.log('Limit file size: ' + limit); in node_modules/express/node_modules/connect/lib/middleware/json.js:46 and restarting node, I get this output in the console:

Limit file size: 1048576
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Limit file size: 52428800
Express server listening on port 3002

We can see that at first, when loading the connect module, the limit is set to 1mb (1048576 bytes). Then when I set the limit, the console.log is called again and this time the limit is 52428800 (50mb). However, I still get a 413 Request entity too large.

Then I added console.log('Limit file size: '+limit); in node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10 and saw another line in the console when calling the route with a big request (before the error output) :

Limit file size: 1048576

This means that somehow, somewhere, connect resets the limit parameter and ignores what I specified. I tried specifying the bodyParser parameters in the route definition individually, but no luck either.

While I did not find any proper way to set it permanently, you can "patch" it in the module directly. If you are using Express 3.4.4, add this at line 46 of node_modules/express/node_modules/connect/lib/middleware/json.js :

limit = 52428800; // for 50mb, this corresponds to the size in bytes

The line number might differ if you don't run the same version of Express. Please note that this is bad practice and it will be overwritten if you update your module.

So this temporary solution works for now, but as soon as a solution is found (or the module fixed, in case it's a module problem) you should update your code accordingly.

I have opened an issue on their GitHub about this problem.

[edit - found the solution]

After some research and testing, I found that when debugging, I added app.use(express.bodyParser({limit: '50mb'}));, but after app.use(express.json());. Express would then set the global limit to 1mb because the first parser he encountered when running the script was express.json(). Moving bodyParser above it did the trick.

That said, the bodyParser() method will be deprecated in Connect 3.0 and should not be used. Instead, you should declare your parsers explicitly, like so :

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));

In case you need multipart (for file uploads) see this post.

[second edit]

Note that in Express 4, instead of express.json() and express.urlencoded(), you must require the body-parser module and use its json() and urlencoded() methods, like so:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

If the extended option is not explicitly defined for bodyParser.urlencoded(), it will throw a warning (body-parser deprecated undefined extended: provide extended option). This is because this option will be required in the next version and will not be optional anymore. For more info on the extended option, you can refer to the readme of body-parser.

[third edit]

It seems that in Express v4.16.0 onwards, we can go back to the initial way of doing this (thanks to @GBMan for the tip):

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
Jarnagin answered 13/11, 2013 at 21:48 Comment(22)
Hi Samuel, Thank you for your comprehensive answer! Yes your correct, this works for me also. I have placed a message on the express issue: github.com/visionmedia/express/issues/1793. Which is relevant to the changes being made by express. Hopefully they will make the change soon... Thanks for you help. This has been driving me mad!Hijacker
Update - Whilst the above works, according to a comment on github. Setting bodyParser within app.use with no parameters sets the global limit to 1mb. update your global statement to express.bodyParser({limit:'100mb'}). Ensure you set the limit once. you can make a lower limit per route but cannot be larger than the global limit. I do wonder what the plan is for {limit:''} within connect as i'm being told in the console its being removed in connect 3.0?Hijacker
My problem was that I had express.json() parser above my bodyParser... After understanding how it all works I removed bodyParser and set de limit in the other, like app.use(express.json({limit:'50mb'}));. I edited my answer to reflect this!Jarnagin
Cool. From what I gather the next version of express once connect is 3.0. the bodyParser will still exist but not call any related code to multipart form data types.Hijacker
for express 4, the indicated code throws "body-parser deprecated undefined extended: provide extended option" on the urlencoded callSubsidy
@Mike'Pomax'Kamermans Thank you for pointing that out. I actually only tested bodyParser.json() and (falsely) assumed it would work for urlencoded. I updated the answer to reflect this.Jarnagin
March 2015 here: For the debugging tip in this answer, the limiting is now checked (for me) at two locations in node_modules/body-parser/node_modules/raw-body/index.js.Amalgamate
Does this apply only for bodies or for the entire request or the url?Softspoken
In case it helps anyone: I use a template which had "express.coffee" which set bodyParser after everything was up and running. Changing it there solved the issue. You should look for rouge files setting bodyParser.Definitive
Thanks for thorough explanation. After fixing one bug today, this error starts being emitted. Utilized proposed solution for Express 3.x and it works like a charm!Swanson
This is as comprehensive as this answer gets, so there is one more point for future reference that I ran into if you are using nginx as a reverse proxy in front of your node.js/express instance, which is recommended practice as well. Nginx will throw the same 413::Request Entity is too large exception. It wont forward the request to your express app. So we need to set client_max_body_size 50M; in the nginx config OR a specific server config OR even a specific location tag will work.La
Thank you samuel for this ! Saved me from a world of headache, Cheers and +1 for the comprehensive answer!Guizot
Hi I am also facing the same issue, with Oracle MCS. But i am not using expressJs. Could anyone help me also?Waverley
Thank you, all. Even though this post is now 3½ years old, it solved the 100KB cap of my file uploader. Please note that since I am using Express 4, the 'express.' prefix is no longer required, at least with my project architecture. I am using: app.use(bodyParser.json({limit: '30mb'}));Bainite
I get a body-parser deprecated undefined extended: provide extended option webapp.js:208:30Sounding
@SamuelBolduc Express 4 no longer requires body-parser in order to parse json and urlencoded data. expressjs.com/en/4x/api.html#express.jsonGomulka
I tried using this, But no working for me. express version 4.17 @SamuelBolducNeighboring
Since Express 4.16 we canu use: app.use(express.json({limit: '50mb'})); app.use(express.urlencoded({limit: '50mb'})); See: expressjs.com/en/4x/api.html#express.urlencodedNoticeable
Just to add to the list... If you are using Firebase functions, the MAX limit is 10MB. You will actually see the limit getting overridden to 10MB.Worked
Thankyou, your solution helped me dubug my problem with vue storefront (vsf). Turns out only i had to update the config settings in local.json from 100kb to 10mb.Kiele
i got 504 error code. on [second edit]Guilt
I have the same issue but its related to video file. when I try to upload a file under 2GB it uploads successfully but when I try to upload a video file size over 2GB, it gives me request entity too large error. I have checked my Nginx config file and I can see it has client max body size set to 5g but still I don't know why I am having this issue.Saros
T
186

In my case it was not enough to add these lines :

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

I tried adding the parameterLimit option on urlencoded function as the documentation says and error no longer appears.

The parameterLimit option controls the maximum number of parameters that are allowed in the URL-encoded data. If a request contains more parameters than this value, a 413 will be returned to the client. Defaults to 1000.

Try with this code:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
Transit answered 9/4, 2016 at 8:5 Comment(4)
The parameterLimit was another gotcha I was missing, thanks for pointing this out.Defiance
Adding the "parameterLimit:50000" solves the problem.Flanders
I was struggling so hard on this until I found this answer. THANK YOU! #RelieveArtilleryman
I don't understand why parameterLimit would need to be changed (and it doesn't help in my case anyway). I'm not sending any parameters, much less 1000 (assuming it's URL parameters)Clinician
M
76

If someone tried all the answers, but hadn't had any success yet and uses NGINX to host the site add this line to /etc/nginx/sites-available

client_max_body_size 100M; #100mb
Mackenzie answered 22/11, 2016 at 15:20 Comment(6)
This was my problem, thanks! One clue is that nginx's default is 1MB, so if you seem to be limited to that amount then it's probably nginx. Also, another clue: body-parser will return a limitproperty and a length property in the error object (along with status:413). Nginx doesn't do this. So if you can't see those properties in the error object, it's probably a nginx limit. Here's how to change this nginx setting (config files most likely in /etc/nginx/sites-available/)Avan
thank you so much for this answer i believe this answer should be upvoted because it is important , personally i forgot about nginx configuration ... again big thank youFigureground
How to set limit only in express?Anoint
@аlexdykyі Answer from Vivek22 : app.use(bodyParser({limit: '50mb'}));Mackenzie
Use the http, server, or location block to edit client_max_body_size.Aileen
Thank u, this was my caseCramer
C
45

I don't think this is the express global size limit, but specifically the connect.json middleware limit. This is 1MB by default when you use express.bodyParser() and don't provide a limit option.

Try:

app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);
Crescint answered 11/11, 2013 at 23:47 Comment(4)
Hi - I am using the following: app.get('/api/0.1/people/', express.bodyParser({limit:'100mb'}), tracks.all); I am still receiving the same error...Hijacker
the default limit is 100kbyte as it seems now github.com/expressjs/body-parser#limitNevis
With express in version 4.18.x in year 2023 there is no longer express.bodyParser available. How does the fix look nowadays?Gaivn
@Gaivn the top answer has a section detailing updates for express 4 using the body-parser npm package which is now a standalone separate package. https://mcmap.net/q/53786/-error-request-entity-too-largeCrescint
M
38

For express ~4.16.0, express.json with limit works directly

app.use(express.json({limit: '50mb'}));
Margenemargent answered 14/1, 2019 at 8:42 Comment(3)
This worked for me! Thank you Stenal P Jolly!Abbotsun
express.raw should be used when posting media files. express.raw({ type: ["application/octet-stream", "application/x-www-form-urlencoded", "image/*", "video/*"], limit: 25 * 1024 * 1024 })Ostosis
confirmed this works for 4.17.0 as well. additionally, fwiw, your express app and it's node_module dependencies will use the configuration set here. In my case, I was not directly using express.json() in my server file when the issue occurred, but some dependencies were using it. Adding the code above as a new line resolved the issues coming from my dependencies.Selemas
A
23

in my case .. setting parameterLimit:50000 fixed the problem

app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: true,
  parameterLimit:50000
}));
Ardor answered 16/5, 2016 at 12:11 Comment(1)
This worked for me. "Request entity too large" seems to refer to large strings (like JSON) too. I was posting ~20Kib JSON and had this problem (notice that default body-parser payload size limit is OK for me). Was solved with parameterLimit only (no need to set any limits).Crossexamine
G
17

The following worked for me... Just use

app.use(bodyParser({limit: '50mb'}));

that's it.

Tried all above and none worked. Found that even though we use like the following,

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

only the 1st app.use(bodyParser()); one gets defined and the latter two lines were ignored.

Refer: https://github.com/expressjs/body-parser/issues/176 >> see 'dougwilson commented on Jun 17, 2016'

Geomorphology answered 3/3, 2017 at 20:15 Comment(1)
THANK YOU! I also had an old app.use(bodyParser.json()); in my code before and indeed, only the first one is taken!Trinh
M
16

2016, none of the above worked for me until i explicity set the 'type' in addition to the 'limit' for bodyparser, example:

  var app = express();
  var jsonParser       = bodyParser.json({limit:1024*1024*20, type:'application/json'});
  var urlencodedParser = bodyParser.urlencoded({ extended:true,limit:1024*1024*20,type:'application/x-www-form-urlencoded' })

  app.use(jsonParser);
  app.use(urlencodedParser);
Molasses answered 6/5, 2016 at 20:42 Comment(3)
Yes, this is what I needed to do also. And it has been set up so you can drive the config settings from your app script.Predigestion
did you mean application/x-www-form-urlencoded (rather than application/x-www-form-urlencoding)?Troxler
According to Express 4 documentation (expressjs.com/en/api.html#express.urlencoded), "application/x-www-form-urlencoded" is already the default.Clinician
B
16

The setting below has worked for me

Express 4.16.1

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

Nginx

client_max_body_size 50m;
client_body_temp_path /data/temp;
Bield answered 24/12, 2020 at 7:26 Comment(0)
A
15

In my case the problem was on Nginx configuration. To solve it I have to edit the file: /etc/nginx/nginx.conf and add this line inside server block:

client_max_body_size 5M;

Restart Nginx and the problems its gone

sudo systemctl restart nginx
Advertence answered 18/9, 2018 at 8:33 Comment(0)
C
13

This issue happens in two cases:

1- request body is too large and server cannot process this large data. this will serve it

app.use(express.json({limit: '50mb'}));

2- req.cookies is too large. When testing different next.js applications on the same browser, each time each app was starting on a different port if there were running some apps. Same app might end up starting at port 3000-3005 range. That means if your app saves cookie, that cookie will be saved for each port. Let's say you started 5 different apps at localhost:3000, and each one saved a cookie. If you make a request, all the cookies will be attached to the request object, in this case you will not able to process even small size of post.body. Solution is you have to delete all the cookies

enter image description here

Chloe answered 3/12, 2022 at 6:17 Comment(0)
F
11

A slightly different approach - the payload is too BIG

All the helpful answers so far deal with increasing the payload limit. But it might also be the case that the payload is indeed too big but for no good reason. If there's no valid reason for it to be, consider looking into why it's so bloated in the first place.

Our own experience

For example, in our case, an Angular app was greedily sending an entire object in the payload. When one bloated and redundant property was removed, the payload size was reduced by a factor of a 100. This significantly improved performance and resolved the 413 error.

Frilling answered 10/6, 2018 at 9:8 Comment(1)
a very underrated answer. thanksDenbrook
P
10

Just adding this one line must solve it actually

app.use(express.json({limit: '50mb'}));

Also recommend you guys to send the whole image to the backend then convert it rather then sending the data from the frontend

Palatinate answered 3/7, 2022 at 13:5 Comment(2)
can you clarify that comment? what's the difference between sending from the front and sending to the back?Islean
@Islean I apologise i wrote this from the react point of view I meant the users to get the image in the same format then send it over to the backend using the post request then converting it there rather then getting the image and converting it into base 64 stringPalatinate
L
9

After דo many tries I got my solution

I have commented this line

app.use(bodyParser.json());

and I put

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

Then it works

Leathers answered 18/9, 2018 at 4:17 Comment(0)
E
7

Pass the below configs to your server to increase your request size.

app.use(express.json({ extended: false, limit: '50mb' }))
app.use(express.urlencoded({ limit: '50mb', extended: false, parameterLimit: 50000 }))
Efface answered 8/6, 2021 at 12:27 Comment(0)
E
6

Little old post but I had the same problem

Using express 4.+ my code looks like this and it works great after two days of extensive testing.

var url         = require('url'),
    homePath    = __dirname + '/../',
    apiV1       = require(homePath + 'api/v1/start'),
    bodyParser  = require('body-parser').json({limit:'100mb'});

module.exports = function(app){
    app.get('/', function (req, res) {
        res.render( homePath + 'public/template/index');
    });

    app.get('/api/v1/', function (req, res) {
        var query = url.parse(req.url).query;
        if ( !query ) {
            res.redirect('/');
        }
        apiV1( 'GET', query, function (response) {
            res.json(response);
        });
    });

    app.get('*', function (req,res) {
        res.redirect('/');
    });

    app.post('/api/v1/', bodyParser, function (req, res) {
        if ( !req.body ) {
            res.json({
                status: 'error',
                response: 'No data to parse'
            });
        }
        apiV1( 'POST', req.body, function (response) {
            res.json(response);
        });
    });
};
Elder answered 11/1, 2017 at 7:48 Comment(0)
A
6

In my case removing Content-type from the request headers worked.

Anorak answered 17/9, 2019 at 4:56 Comment(1)
Certainly this is an underappreciated answer. My point was also like this. I was trying to manage all of my headers for the requests in a place. So these common header setup was containing Content-Type. After removal, issue has been resolved.Mangan
M
6

To add to Alexander's answer.

By default, NGINX has an upload limit of 1 MB per file. By limiting the file size of uploads, you can prevent some types of Denial-of-service (DOS) attacks and many other issues.

So when you try to upload a file above the 1MB limit you will run into a 413 error.

By editing client_max_body_size, you can adjust the file upload size. Use the http, server, or location block to edit client_max_body_size.

server {
  server_name example.com;

  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:8080;
    client_max_body_size 20M;
  }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/infohob.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/infohob.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

Reference: Limit File Upload Size in NGINX

Miscreance answered 25/6, 2022 at 14:4 Comment(1)
Thank you so much. For this clarification I did the same but in the main file that is nginx.conf. Now I realize that will make the configuration for each server block. But I need that in only one server block i.e my backend. :)Salyers
D
5

I've used another practice for this problem with multer dependancie.

Example:

multer = require('multer');

var uploading = multer({
  limits: {fileSize: 1000000, files:1},
});

exports.uploadpictureone = function(req, res) {
  cloudinary.uploader.upload(req.body.url, function(result) {
    res.send(result);
  });
};

module.exports = function(app) {
    app.route('/api/upload', uploading).all(uploadPolicy.isAllowed)
        .post(upload.uploadpictureone);
};
Dehydrogenase answered 16/3, 2016 at 10:44 Comment(0)
H
5

If you are using express.json() and bodyParser together it will give error as express sets its own limit.

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

remove above code and just add below code

app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb",  extended: true, parameterLimit: 1000000 }));
Hejaz answered 15/4, 2020 at 12:37 Comment(0)
C
5

After trying everything in this post, i was unsuccessful. But I found a solution that worked for me. I was able to solve it without using the body-parser and only with the express. It looked like this:

const express = require('express');    

const app = express();
app.use(express.json({limit: '25mb'}));
app.use(express.urlencoded({limit: '25mb', extended: true}));

Don't forget to use extended: true to remove the deprecated message from the console.

Cabinetwork answered 29/4, 2021 at 19:47 Comment(0)
A
5

Work for me:

Config nginx max file zise [https://patriciahillebrandt.com/nginx-413-request-entity-too-large/][1]

and

app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb",  extended: true, parameterLimit: 1000000 }));
Arette answered 3/5, 2022 at 14:19 Comment(0)
S
4

for me following snippet solved the problem.

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'})); 
Selfimportant answered 20/6, 2019 at 17:21 Comment(0)
S
3

I too faced that issue, I was making a silly mistake by repeating the app.use(bodyParser.json()) like below:

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

by removing app.use(bodyParser.json()), solved the problem.

Spinozism answered 2/8, 2019 at 6:3 Comment(0)
I
3

I faced the same issue recently and bellow solution workes for me.

Dependency : 
express >> version : 4.17.1
body-parser >> version": 1.19.0
const express = require('express');
const bodyParser = require('body-parser');

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

For understanding : HTTP 431

The HTTP 413 Payload Too Large response status code indicates that the request entity is larger than limits defined by server; the server might close the connection or return a Retry-After header field.

Immoderation answered 1/10, 2020 at 19:14 Comment(0)
P
2

The better use you can specify the limit of your file size as it is shown in the given lines:

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

You can also change the default setting in node-modules body-parser then in the lib folder, there are JSON and text file. Then change limit here. Actually, this condition pass if you don't pass the limit parameter in the given line app.use(bodyParser.json({limit: '10mb', extended: true})).

Peignoir answered 24/5, 2019 at 14:36 Comment(0)
D
1

Express 4.17.1

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

Demo csb

Decant answered 17/12, 2020 at 16:19 Comment(0)
C
1

Following code resolved my issue:

var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false, limit: '5mb' });
Charmain answered 11/11, 2021 at 14:16 Comment(0)
A
0

For me the main trick is

app.use(bodyParser.json({
  limit: '20mb'
}));

app.use(bodyParser.urlencoded({
  limit: '20mb',
  parameterLimit: 100000,
  extended: true 
}));

bodyParse.json first bodyParse.urlencoded second

Amoeboid answered 18/2, 2019 at 17:58 Comment(0)
L
0

For those who start the NodeJS app in Azure under IIS, do not forget to modify web.config as explained here Azure App Service IIS "maxRequestLength" setting

Leroi answered 1/10, 2020 at 14:32 Comment(0)
E
0

I am using multer to upload files to AWS s3. For me, after adding client_max_body_size 100M; into nginx file, I get 400 error. (but the 413 error is gone, this means that it successfully went through nginx and reach your server)

Solution is below: https://mcmap.net/q/55160/-nodejs-multer-nginx-upload-error-unexpected-token-in-json-at-position-0

My app.js file did not need to change, and remain like this, which works:

const express = require('express');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
Ensile answered 23/2, 2022 at 16:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.