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.
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'}));
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}));
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
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);
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
}));
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);
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'
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'}));
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
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
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);
};
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);
});
});
};
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.
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'}));
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.
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})).
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 }));
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.
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.
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
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
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"
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
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