NodeJS Router payload too large

19,342

Solution 1

I found the solution for my problem in one of the unaccepted answers of the suggested duplicate of TKJohn. I had to add the parameter limit so that my code became:

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

After the addition it worked!

I was also ablo to remove the code from APIRoutes.js

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

Solution 2

You can use this straightaway in express if you are using the latest version of express.

    let express = require('express');

    let app = express();

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

Please note that this will only work with express versions bundled with bodyParser (bodyParser was added back to express in release 4.16.0)

Solution 3

This worked for me

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

Solution 4

Tried looking online for past couple of hours and found no solution to 413 Payload

Turns out in urlencoded.js within the body-parser module there are additional options which take care of limits.

Options like parameterLimit and arrayLimit are items to amend if your parameter or array size exceeds the limit that is granted by default (which is 100 for array size).

Share:
19,342
Stephan Celis
Author by

Stephan Celis

Updated on June 04, 2022

Comments

  • Stephan Celis
    Stephan Celis almost 2 years

    I'm creating rest endpoints in my nodejs application as follows:

    In my server.js I have the following code:

    var express = require('express');
    var app = express();
    app.use(express.json({ limit: '50mb' }));
    app.use(express.urlencoded({ limit: '50mb', extended: true }));
    app.use(require('./routes/APIRoutes'));
    

    I also tried the code below instead of using the express.json and expres.urlencoded as suggested on the potential duplicate question.

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

    In my APIRoutes file I have the following code:

    /* --- INIT --- */
    var express = require('express');
    var router = express.Router();
    var bodyParser = require('body-parser');
    router.use(bodyParser.json({ limit: '50mb' }));
    router.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
    
    var urlencodedParser = bodyParser.urlencoded({ limit: '50mb', extended: true });
    
    router.post('...', urlencodedParser, function (req, res) {
    ...
    });
    

    I tried different combinations and orders for setting the limit higher. But currently every time I send a payload of 2kb, I get an 413 "(Payload Too Large)" error back.

    Any help what the correct location is for setting the limit?

  • Monkey D. Luffy
    Monkey D. Luffy about 4 years
    I tried using this, But no working for me. express version 4.17
  • Admin
    Admin over 2 years
    How do you handle the error when the file size is bigger than that?