PayloadTooLargeError with Limit Set

riki picture riki · Jun 22, 2018 · Viewed 8.1k times · Source

Hi I have a problem with Express.js, I need to send a base64 file to node.js, my configuraizone is what you see below, but when I send the file I get this error: PayloadTooLargeError: request entity too large! I've read that you need to set the limit on body-parsers like I did below, the fact is that it keeps happening to me how can I solve this?

Node Code:

const express = require("express");
const myParser = require("body-parser");
//const http = require('http');
const app = express();

//app.use(myParser.json({ type: 'application/*+json' }))
app.use(myParser.json());
app.use(myParser.urlencoded({
    extended: true
}));
app.use(myParser.json({limit: '200mb'}));
app.use(myParser.urlencoded({limit: '200mb', extended: true}));

//Porta predefinita Server
const RunPort = 8988;
//Avvio del server sulla porta specificata
app.listen(RunPort, function () {
    console.log("Serve run on Port: ", RunPort);
})
module.exports = app;

Answer

Marcos Casagrande picture Marcos Casagrande · Jun 22, 2018

In your code you have called twice to bodyParser.json() & bodyParser.urlencoded(), the problem is that the one with limit are after the calls without options, which defaults to 100kb. So when you POST something greater than 100kb that error will be thrown, since the first parser will not go to the next middleware.

You shouldn't call bodyParser[method] twice.

Remove:

app.use(myParser.json());
app.use(myParser.urlencoded({
    extended: true
}));

And leave:

app.use(myParser.json({limit: '200mb'}));
app.use(myParser.urlencoded({limit: '200mb', extended: true}));

Depending on how you're posting the base64 string, you may want to use:

app.use(myParser.text({ limit: '200mb' });