Error: request entity too large

Otrzymuję następujący błąd z 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
Używam meanstack. W moim Expressie mam następujące wyrażenia użytkowe.js
//Set Request Size Limit
app.use(express.limit(100000000));

W fiddlerze widzę nagłówek content-length o wartości: 1078702

Myślę, że to jest w oktetach, to jest 1.0787 megabajtów.

Nie mam pojęcia, dlaczego express nie pozwala mi publikować tablicy json, którą wcześniej publikowałem w innym projekcie express, który nie używał projektu stosu mean struktura.

Author: GG., 2013-11-11

23 answers

Ostatnio miałem ten sam błąd i wszystkie znalezione rozwiązania nie działały.

Po pewnym kopaniu okazało się, że ustawienie app.use(express.bodyParser({limit: '50mb'})); poprawnie ustawiło limit.

Podczas dodawania console.log('Limit file size: '+limit); w node_modules/express/node_modules/connect/lib/middleware/json.js:46 i restartowania węzła, otrzymuję to wyjście w konsoli:

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

Widzimy, że na początku, podczas ładowania modułu connect, limit jest ustawiony na 1mb (1048576 bajtów). Następnie po ustawieniu limitu, console.log jest wywoływany ponownie i tym razem limit wynosi 52428800 (50mb). Jednakże, Nadal dostaję 413 Request entity too large.

Następnie dodałem console.log('Limit file size: '+limit); w node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10 i zobaczyłem kolejną linię w konsoli podczas wywoływania trasy z dużym żądaniem (przed wyjściem błędu):

Limit file size: 1048576

Oznacza to, że w jakiś sposób, gdzieś, connect resetuje parametr limit i ignoruje to, co podaliśmy. Próbowałem określić parametry bodyParser w definicji trasy indywidualnie, ale też bez powodzenia.

Chociaż nie znalazłem odpowiedniego sposobu, aby ustawić go na stałe, można " patch " to w moduł bezpośrednio. Jeśli używasz Express 3.4.4, dodaj to w linii 46 Z node_modules/express/node_modules/connect/lib/middleware/json.js:

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

Numer linii może się różnić, jeśli nie uruchomisz tej samej wersji Express. Należy pamiętać, że jest to zła praktyka i zostanie ona nadpisana , jeśli zaktualizujesz swój moduł.

Więc to tymczasowe rozwiązanie działa na razie, ale jak tylko rozwiązanie zostanie znalezione (lub naprawiony moduł, na wypadek, gdyby był to problem z modułem) powinieneś odpowiednio zaktualizować swój kod.

I otworzyli problem na ich Githubie dotyczący tego problemu.

[edit-znaleziono rozwiązanie]

Po kilku badaniach i testach odkryłem, że podczas debugowania dodałem app.use(express.bodyParser({limit: '50mb'}));, ale po app.use(express.json());. Express ustawiłby globalny limit na 1mb, ponieważ pierwszym parserem, który napotkał podczas uruchamiania skryptu, był express.json(). Poruszanie się bodyParser nad nim zadziałało.

To powiedziawszy, metoda bodyParser() będzie przestarzała w Connect 3.0 i nie powinna być używany. Zamiast tego powinieneś jawnie zadeklarować swoje parsery, tak:

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

W przypadku, gdy potrzebujesz multipart (do przesyłania plików) zobacz ten post .

[druga edycja]

Zauważ, że w Express 4, zamiast express.json() i express.urlencoded(), musisz wymagać modułu body-parser i używać jego metod json() i urlencoded(), jak tak:

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

Jeśli opcja extended nie jest jawnie zdefiniowana dla bodyParser.urlencoded(), wyświetli ostrzeżenie (body-parser deprecated undefined extended: provide extended option). Dzieje się tak dlatego, że ta opcja będzie wymagana w następnej wersji i nie będzie już opcjonalna. Więcej informacji na temat opcji extended można znaleźć w readme z body-parser.

[trzecia edycja]

Wydaje się, że w Expressie V4.16.0, możemy wrócić do początkowego sposobu zrobienia tego (dzięki @GBMan za poradę): {]}
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
 1148
Author: Samuel Bolduc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-03 16:48:32

W moim przypadku nie wystarczyło dodać tych linijek:

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

Próbowałem dodać opcję parameterLimit w funkcji urlencoded, jak mówi dokumentacja i błąd nie pojawia się.

Opcja parameterLimit kontroluje maksymalną liczbę parametrów które są dozwolone w danych zakodowanych URL. Jeżeli wniosek zawiera więcej parametry niż ta wartość, 413 zostanie zwrócony do klienta. Domyślnie 1000.

Spróbuj z tym kodem:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
 134
Author: slorenzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-03 21:42:50

Jeśli ktoś spróbował wszystkich odpowiedzi, ale nie odniósł jeszcze żadnego sukcesu i używa NGINX do hostowania strony, Dodaj tę linię do /etc / nginx / sites-available

client_max_body_size 100M; #100mb
 58
Author: Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 22:04:28

Myślę, że nie jest to limit rozmiaru express global, ale konkretnie connect.JSON middleware limit . Domyślnie jest to 100KB, gdy używasz express.bodyParser() i nie podajesz opcji limit.

Spróbuj:

app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);
 33
Author: Peter Lyons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-30 17:04:13

W moim przypadku .. ustawienie parameterLimit:50000 naprawiono problem

app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: true,
  parameterLimit:50000
}));
 17
Author: Mohanad Obaid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 12:51:11

2016, żaden z powyższych nie zadziałał dla mnie, dopóki explicity nie ustawił "type" oprócz "limit" dla bodyparser, przykład:

  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);
 16
Author: user1709076,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-03 18:28:04

Następujące zadziałały dla mnie... Wystarczy użyć

app.use(bodyParser({limit: '50mb'}));
To wszystko. Próbowałem wszystkiego i nic nie działało. Okazało się, że nawet jeśli używamy jak poniżej,
app.use(bodyParser());
app.use(bodyParser({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb'}));

Zdefiniowano tylko pierwszą app.use(bodyParser());, a dwie ostatnie linie zostały zignorowane.

Zobacz: https://github.com/expressjs/body-parser/issues/176 > > zobacz 'dougwilson skomentował 17 czerwca 2016'

 13
Author: Vivek22,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-03 20:18:46

Dla express ~4.16.0, express.json z limitem działa bezpośrednio

app.use(express.json({limit: '50mb'}));
 13
Author: Stenal P Jolly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-14 08:42:39

W moim przypadku problem był na konfiguracji Nginx. Aby go rozwiązać, muszę edytować plik: /etc/nginx/nginx.conf i dodać tę linię wewnątrz bloku serwera:

client_max_body_size 5M;
W tym celu należy uruchomić Nginx i problemy z nim zniknęły.]}
sudo systemctl restart nginx
 9
Author: Jaime Fernandez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 08:33:56

Po wielu próbach mam swoje rozwiązanie

Skomentowałem ten wiersz

app.use(bodyParser.json());

And I put

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

Then it works

 6
Author: Maulik Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-10 08:51:12

Użyłem innej praktyki w tym problemie z multi zależnością.

Przykład:

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);
};
 5
Author: Quentin Malguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-17 18:28:01

Mały stary post ale miałem ten sam problem

Za pomocą express 4.+ mój kod wygląda tak i działa świetnie po dwóch dniach intensywnych testów.

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);
        });
    });
};
 5
Author: Alexander Sasha Shcherbakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 07:48:37

Nieco inne podejście - ładunek jest za duży

Wszystkie pomocne odpowiedzi do tej pory dotyczą zwiększenia limitu ładowności. Ale może być też tak, że ładowność jest rzeczywiście zbyt duża, ale bez dobrego powodu. Jeśli nie ma ważnego powodu, zastanów się, dlaczego jest tak rozdęty w pierwszej kolejności.

Nasze własne doświadczenia

Na przykład, w naszym przypadku, aplikacja kątowa chciwie wysyłała cały obiekt w ładunku. Gdy jeden usunięto nadęty i zbędny obiekt, wielkość ładunku została zmniejszona o współczynnik 100. To znacznie poprawiło wydajność i rozwiązało błąd 413.

 4
Author: Boaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-07 13:21:39

Dla mnie po snippet rozwiązał problem.

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'})); 
 4
Author: Sanjeeva Kumar Acham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-25 05:36:23

W moim przypadku usunięcie Content-type z nagłówków żądania zadziałało.

 3
Author: carkod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-17 04:56:40

Im lepiej użyć, możesz określić limit rozmiaru pliku, Jak pokazano w podanych wierszach:

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

Możesz również zmienić domyślne ustawienie w node-modules body-parser, a następnie w folderze lib znajdują się pliki JSON i tekstowe. Następnie zmień limit tutaj. W rzeczywistości warunek ten przejdzie, jeśli nie przekażesz parametru limit w podanej linii app.use (bułg.json ({limit: '10MB', extended: true})).

 2
Author: Ravi Beniwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-09 18:51:03

Jeśli używasz express.json() i bodyParser razem, spowoduje to błąd, ponieważ express ustawia swój własny limit.

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

Usuń powyższy kod i po prostu dodaj poniższy kod

app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb",  extended: true, parameterLimit: 1000000 }));
 2
Author: NIKIT PULEKAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-15 13:01:13

Ja też miałem do czynienia z tym problemem, popełniłem głupi błąd powtarzając app.use(bodyParser.json()) Jak poniżej:

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

Usuwając app.use(bodyParser.json()), rozwiązaliśmy problem.

 1
Author: WasiF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-02 06:03:54

Ostatnio spotkałem się z tym samym problemem i poniżej rozwiązanie działa dla mnie.

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}));

Dla zrozumienia : HTTP 431

Zbyt duży kod statusu odpowiedzi HTTP 413 wskazuje, że encja żądania jest większa niż limity określone przez serwer; serwer może zamknąć połączenie lub zwrócić pole nagłówka Retry-After.

 1
Author: Forhad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-01 19:14:49

Ustawienie poniżej działa dla mnie

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
 1
Author: Kent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-24 07:26:10

Dla mnie główną sztuczką jest

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

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

BodyParse.JSON first bodyParse.urlencoded second

 0
Author: Nicollas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-18 17:58:39

Dla tych, którzy uruchamiają aplikację NodeJS na Azure w ramach IIS, nie zapomnij zmodyfikować sieci.config jak wyjaśniono tutaj Azure App Service IIS ustawienie "maxRequestLength"

 0
Author: KEMBL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-01 14:32:45

Express 4.17.1

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

Demo csb

 0
Author: antelove,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-17 16:19:56