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 podstępu. Mam następujące instrukcje użycia w pliku express.js
//Set Request Size Limit
app.use(express.limit(100000000));
W skrzypaczu widzę nagłówek o długości treści o wartości: 1078702
Wierzę, że to jest w oktetach, to 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 ekspresowym, który nie korzystał ze struktury projektu średniego stosu.
javascript
node.js
http
express
Mike James
źródło
źródło
Odpowiedzi:
Miałem ostatnio ten sam błąd i wszystkie znalezione przeze mnie rozwiązania nie zadziałały.
Po pewnym kopaniu stwierdziłem, że ustawienie
app.use(express.bodyParser({limit: '50mb'}));
prawidłowo ustawiło limit.Podczas dodawania
console.log('Limit file size: '+limit);
wnode_modules/express/node_modules/connect/lib/middleware/json.js:46
i ponownym węzeł, otrzymuję ten wyjścia w konsoli:Widzimy, że na początku, podczas ładowania
connect
modułu, limit jest ustawiony na 1 MB (1048576 bajtów). Następnie, kiedy ustawiam limit,console.log
wywoływane jest ponownie i tym razem limit wynosi 52428800 (50mb). Jednak nadal dostaję413 Request entity too large
.Potem dodaje
console.log('Limit file size: '+limit);
sięnode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
i zobaczył kolejną linię w konsoli podczas wywoływania trasę z dużym życzenie (przed wyjściem błędu):Oznacza to, że gdzieś
connect
resetuje parametr limit i ignoruje to, co podaliśmy. Próbowałem określićbodyParser
parametry w definicji trasy indywidualnie, ale też nie miałem szczęścia.Chociaż nie znalazłem żadnego odpowiedniego sposobu, aby ustawić go na stałe, możesz „ załatać ” go bezpośrednio w module. Jeśli korzystasz z Express 3.4.4, dodaj to w wierszu 46
node_modules/express/node_modules/connect/lib/middleware/json.js
: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 będzie nadpisane jeśli zaktualizować moduł.
Więc to tymczasowe rozwiązanie działa na razie, ale jak tylko zostanie znalezione rozwiązanie (lub moduł naprawiony, jeśli jest to problem z modułem), powinieneś odpowiednio zaktualizować swój kod.
Otworzyłem problem na ich GitHubie na ten temat.
[edytuj - znalazł rozwiązanie]
Po kilku badaniach i testach odkryłem, że podczas debugowania dodałem
app.use(express.bodyParser({limit: '50mb'}));
, ale późniejapp.use(express.json());
. Express ustawiłby wówczas globalny limit na 1 MB, ponieważ był to pierwszy analizator składni, który napotkał podczas uruchamiania skryptuexpress.json()
. Poruszanie siębodyParser
nad tym pomogło.To powiedziawszy,
bodyParser()
metoda będzie przestarzała w Connect 3.0 i nie powinna być używana. Zamiast tego powinieneś jawnie zadeklarować swoje parsery:Jeśli potrzebujesz wieloczęściowego (do przesyłania plików), zobacz ten post .
[druga edycja]
Zauważ, że w Express 4 zamiast
express.json()
iexpress.urlencoded()
, musisz wymagać modułu parsera ciała i używać jego metodjson()
iurlencoded()
metod, takich jak:Jeśli
extended
opcja nie jest wyraźnie zdefiniowanabodyParser.urlencoded()
, wygeneruje ostrzeżenie (body-parser deprecated undefined extended: provide extended option
). Wynika to z faktu, że ta opcja będzie wymagana w następnej wersji i nie będzie już opcjonalna. Aby uzyskać więcej informacji na temat tejextended
opcji, można zapoznać się z readme zbody-parser
.[trzecia edycja]
Wydaje się, że w Express v4.16.0 i później możemy wrócić do początkowego sposobu zrobienia tego (dzięki @GBMan za wskazówkę):
źródło
app.use(express.json({limit:'50mb'}));
. Zredagowałem swoją odpowiedź, aby to odzwierciedlić!urlencoded
połączenia413::Request Entity is too large
wyjątek. Nie przekaże żądania do Twojej aplikacji ekspresowej. Musimy więc ustawićclient_max_body_size 50M;
w konfiguracji nginx LUB określoną konfigurację serwera LUB nawet określony znacznik lokalizacji będzie działał.Używam Express 4.
W moim przypadku nie wystarczyło dodać następujące wiersze:
Próbowałem dodać opcję parametrLimit do funkcji urlencoded, ponieważ dokumentacja mówi, a błąd już się nie pojawia.
Spróbuj użyć tego kodu:
źródło
Jeśli ktoś wypróbował wszystkie odpowiedzi, ale nie odniósł jeszcze sukcesu i używa NGINX do hostowania strony, dodaj tę linię do / etc / nginx / sites-available
źródło
body-parser
powróci dolimit
własności ilength
mienia w obiekcie błędu (wraz zstatus:413
). Nginx tego nie robi. Jeśli więc nie widzisz tych właściwości w obiekcie błędu, prawdopodobnie jest to limit nginx. Oto jak zmienić to ustawienie Nginx (pliki konfiguracyjne najprawdopodobniej w/etc/nginx/sites-available/
)Nie sądzę, że jest to wyraźny globalny limit wielkości, ale konkretnie limit oprogramowania pośredniego connect.json . Jest to domyślnie 100 kb, gdy używasz
express.bodyParser()
i nie zapewniaszlimit
opcji.Próbować:
źródło
w moim przypadku .. ustawienie
parameterLimit:50000
naprawiło problemźródło
body-parser
ładunku jest dla mnie OK). Zostało rozwiązane tylko (nie trzeba ustawiać żadnych s).parameterLimit
limit
2016, żadne z powyższych nie działało dla mnie, dopóki I Explicity nie ustawił „typu” oprócz „limitu” dla bodyparsera, przykład:
źródło
application/x-www-form-urlencoded
(a nieapplication/x-www-form-urlencoding
)?Poniższe działało dla mnie ... Wystarczy użyć
Otóż to.
Próbowałem wszystkiego powyżej i żaden nie działał. Stwierdziliśmy, że mimo że używamy w następujący sposób,
tylko pierwszy
app.use(bodyParser());
definiowana jest a dwie ostatnie linie zostały zignorowane.Patrz: https://github.com/expressjs/body-parser/issues/176 >> patrz „skomentował dougwilson 17 czerwca 2016 r.”
źródło
W przypadku express ~ 4.16.0, express.json z limitem działa bezpośrednio
źródło
W moim przypadku problem dotyczył konfiguracji Nginx . Aby go rozwiązać, muszę edytować plik:
/etc/nginx/nginx.conf
i dodać ten wiersz do bloku serwera:Uruchom ponownie Nginx i problemy zniknęły
źródło
Użyłem innej praktyki dla tego problemu z wieloma zależnościami.
Przykład:
źródło
Trochę stary post, ale miałem ten sam problem
Używając express 4. + mój kod wygląda tak i działa świetnie po dwóch dniach intensywnych testów.
źródło
Nieco inne podejście - ładowność jest zbyt DUŻA
Wszystkie dotychczasowe pomocne odpowiedzi dotyczą zwiększenia limitu ładowności. Ale może się zdarzyć, że ładowność jest rzeczywiście zbyt duża, ale bez uzasadnionego powodu. Jeśli nie ma żadnego uzasadnionego powodu, zastanów się, dlaczego jest tak wzdęty.
Nasze własne doświadczenie
Na przykład w naszym przypadku aplikacja Angular łapczywie wysyła cały obiekt do ładunku. Gdy jedna nadęta i zbędna właściwość została usunięta, rozmiar ładunku zmniejszono o współczynnik 100 . To znacznie poprawiło wydajność i rozwiązało błąd 413.
źródło
Po wielu próbach mam rozwiązanie
Skomentowałem ten wiersz
i położyłem
To działa
źródło
dla mnie następujący fragment rozwiązał problem.
źródło
Im lepiej wykorzystać limit rozmiaru pliku, jak pokazano w podanych wierszach:
Możesz także zmienić ustawienie domyślne w parserze body-parser modułów-węzłów, a następnie w folderze lib znajduje się JSON i plik tekstowy. Następnie zmień limit tutaj. Właściwie ten warunek jest spełniony, jeśli nie podasz parametru limit w podanej linii app.use (bodyParser.json ({limit: '10mb', Extended: true})).
źródło
Ja również zmierzyłem się z tym problemem, popełniłem głupi błąd, powtarzając
app.use(bodyParser.json())
poniższe:przez usunięcie
app.use(bodyParser.json())
rozwiązał problem.źródło
W moim przypadku
Content-type
działało usuwanie nagłówków z żądania.źródło
Dla mnie główna sztuczka to
bodyParse.json pierwszy bodyParse.urlencoded drugi
źródło
Jeśli używasz
express.json()
i bodyParser razem, to da błąd, ponieważ express ustawia własny limit.usuń powyższy kod i po prostu dodaj poniższy kod
źródło