Ich erhalte den folgenden Fehler mit 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
Ich benutze Meanstack. Ich habe die folgenden Verwendungsanweisungen in meiner express.js
//Set Request Size Limit
app.use(express.limit(100000000));
In Fiddler kann ich den Content-Length-Header mit dem Wert: 1078702 sehen
Ich glaube, das ist in Oktetten, das sind 1.0787 Megabyte.
Ich habe keine Ahnung, warum Express es mir nicht erlaubt, das JSON-Array zu veröffentlichen, das ich zuvor in einem anderen Express-Projekt gepostet habe, das nicht die mittlere Stapelprojektstruktur verwendet hat.
javascript
node.js
http
express
Mike James
quelle
quelle
Antworten:
Ich hatte kürzlich den gleichen Fehler und alle Lösungen, die ich gefunden habe, haben nicht funktioniert.
Nach einigem Graben stellte ich fest, dass die Einstellung
app.use(express.bodyParser({limit: '50mb'}));
das Limit korrekt eingestellt hatte.Wenn eine Zugabe
console.log('Limit file size: '+limit);
innode_modules/express/node_modules/connect/lib/middleware/json.js:46
und Neustarten Knoten, ich diese Ausgabe in der Konsole:Wir können sehen, dass beim Laden des
connect
Moduls zunächst das Limit auf 1 MB (1048576 Byte) festgelegt wird. Wenn ich dann das Limit einstelle,console.log
wird das erneut aufgerufen und dieses Mal ist das Limit 52428800 (50 MB). Ich bekomme aber immer noch eine413 Request entity too large
.Dann habe ich
console.log('Limit file size: '+limit);
innode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
und sah eine weitere Zeile in der Konsole , wenn die Strecke mit einem großen Wunsch Aufruf (vor der Fehlerausgabe):Dies bedeutet, dass irgendwo irgendwo
connect
der Grenzwertparameter zurückgesetzt wird und ignoriert wird, was wir angegeben haben. Ich habe versucht, diebodyParser
Parameter in der Routendefinition einzeln anzugeben , aber auch kein Glück.Ich habe zwar keinen geeigneten Weg gefunden, um es dauerhaft einzustellen, aber Sie können es direkt im Modul " patchen ". Wenn Sie Express 3.4.4 verwenden, fügen Sie dies in Zeile 46 von hinzu
node_modules/express/node_modules/connect/lib/middleware/json.js
:Die Zeilennummer kann abweichen, wenn Sie nicht dieselbe Express-Version ausführen. Bitte beachten Sie, dass dies eine schlechte Praxis ist und überschrieben wird, wenn Sie Ihr Modul aktualisieren.
Diese temporäre Lösung funktioniert also vorerst, aber sobald eine Lösung gefunden wurde (oder das Modul repariert wurde, falls es sich um ein Modulproblem handelt), sollten Sie Ihren Code entsprechend aktualisieren.
Ich habe auf ihrem GitHub ein Problem zu diesem Problem geöffnet .
[bearbeiten - die Lösung gefunden]
Nach einigen Recherchen und Tests stellte ich fest, dass ich beim Debuggen hinzugefügt habe
app.use(express.bodyParser({limit: '50mb'}));
, aber danachapp.use(express.json());
. Express würde dann das globale Limit auf 1 MB festlegen, da der erste Parser, auf den er beim Ausführen des Skripts stieß, warexpress.json()
. SichbodyParser
darüber zu bewegen hat den Trick getan.Die
bodyParser()
Methode ist jedoch in Connect 3.0 veraltet und sollte nicht verwendet werden. Stattdessen sollten Sie Ihre Parser explizit wie folgt deklarieren:Falls Sie mehrteilige Dateien benötigen (zum Hochladen von Dateien), lesen Sie diesen Beitrag .
[zweite Bearbeitung]
Beachten Sie, dass Sie in Express 4 anstelle von
express.json()
undexpress.urlencoded()
das Body-Parser- Modul benötigen und dessenjson()
undurlencoded()
Methoden wie folgt verwenden müssen:Wenn die
extended
Option nicht explizit für definiert istbodyParser.urlencoded()
, wird eine Warnung ausgegeben (body-parser deprecated undefined extended: provide extended option
). Dies liegt daran, dass diese Option in der nächsten Version erforderlich ist und nicht mehr optional ist. Weitere Informationen zu dieserextended
Option finden Sie in der Readme-Datei vonbody-parser
.[dritte Bearbeitung]
Es scheint, dass wir ab Express v4.16.0 zum ursprünglichen Weg zurückkehren können (danke an @GBMan für den Tipp):
quelle
app.use(express.json({limit:'50mb'}));
. Ich habe meine Antwort bearbeitet, um dies widerzuspiegeln!urlencoded
413::Request Entity is too large
Ausnahme auslösen . Die Anfrage wird nicht an Ihre Express-App weitergeleitet. Wir müssen alsoclient_max_body_size 50M;
in der Nginx-Konfiguration ODER eine bestimmte Serverkonfiguration festlegen ODER sogar ein bestimmtes Standort-Tag funktioniert.Ich benutze Express 4.
In meinem Fall war es nicht genug, diese Zeilen hinzuzufügen:
Ich habe versucht, die Option parameterLimit für die urlencodierte Funktion hinzuzufügen, wie in der Dokumentation angegeben, und es wird kein Fehler mehr angezeigt.
Versuchen Sie es mit diesem Code:
quelle
Wenn jemand alle Antworten ausprobiert hat, aber noch keinen Erfolg hatte und NGINX zum Hosten der Site verwendet, fügen Sie diese Zeile zu / etc / nginx / sites-available hinzu
quelle
body-parser
Gibt einelimit
Eigenschaft und einelength
Eigenschaft im Fehlerobjekt zurück (zusammen mitstatus:413
). Nginx macht das nicht. Wenn Sie diese Eigenschaften im Fehlerobjekt nicht sehen können, handelt es sich wahrscheinlich um ein Nginx-Limit. Hier ist, wie man diese Nginx-Einstellung ändert (Konfigurationsdateien höchstwahrscheinlich in/etc/nginx/sites-available/
)Ich denke nicht, dass dies die globale Größenbeschränkung ist, sondern speziell die Middleware-Beschränkung connect.json . Dies sind standardmäßig 100 KB, wenn Sie
express.bodyParser()
einelimit
Option verwenden und diese nicht bereitstellen .Versuchen:
quelle
in meinem Fall .. Einstellung
parameterLimit:50000
behoben das Problemquelle
body-parser
Grenze OK für mich). Wurde nur mit gelöst (keine Notwendigkeit, s zu setzen ).parameterLimit
limit
2016 hat nichts davon für mich funktioniert, bis ich explizit den 'Typ' zusätzlich zum 'Limit' für Bodyparser festgelegt habe, Beispiel:
quelle
application/x-www-form-urlencoded
(eher alsapplication/x-www-form-urlencoding
)?Folgendes hat bei mir funktioniert ... Einfach benutzen
das ist es.
Versuchte alles oben und keiner hat funktioniert. Gefunden, dass, obwohl wir wie folgt verwenden,
nur der 1 ..
app.use(bodyParser());
wird definiert und die letzten beiden Zeilen wurden ignoriert.Siehe: https://github.com/expressjs/body-parser/issues/176 >> siehe 'dougwilson kommentiert am 17. Juni 2016'
quelle
Für Express ~ 4.16.0 funktioniert express.json mit limit direkt
quelle
In meinem Fall lag das Problem in der Nginx-Konfiguration . Um es zu lösen, muss ich die Datei bearbeiten:
/etc/nginx/nginx.conf
und diese Zeile innerhalb des Serverblocks hinzufügen:Starten Sie Nginx neu und die Probleme sind weg
quelle
Ich habe eine andere Praxis für dieses Problem mit Multer Dependancie angewendet.
Beispiel:
quelle
Kleine alte Post, aber ich hatte das gleiche Problem
Mit Express 4. + sieht mein Code so aus und funktioniert nach zwei Tagen intensiver Tests hervorragend.
quelle
Ein etwas anderer Ansatz - die Nutzlast ist zu groß
Alle bisher hilfreichen Antworten befassen sich mit der Erhöhung des Nutzlastlimits. Es kann aber auch vorkommen, dass die Nutzlast zwar zu groß ist, aber ohne guten Grund. Wenn es keinen triftigen Grund dafür gibt, überlegen Sie, warum es überhaupt so aufgebläht ist.
Unsere eigene Erfahrung
In unserem Fall hat beispielsweise eine Angular-App gierig ein ganzes Objekt in der Nutzlast gesendet. Wenn eine aufgeblähte und redundante Eigenschaft entfernt wurde, wurde die Nutzlastgröße um den Faktor 100 reduziert . Dies verbesserte die Leistung erheblich und löste den 413-Fehler.
quelle
Nach vielen Versuchen bekam ich meine Lösung
Ich habe diese Zeile kommentiert
und ich setze
Dann funktioniert es
quelle
Für mich löste das folgende Snippet das Problem.
quelle
Zur besseren Verwendung können Sie die Grenze Ihrer Dateigröße angeben, wie in den angegebenen Zeilen angegeben:
Sie können die Standardeinstellung auch im Body-Parser der Knotenmodule ändern. Im Ordner lib befinden sich JSON und eine Textdatei. Dann ändern Sie hier das Limit. Tatsächlich wird diese Bedingung erfüllt, wenn Sie den Parameter limit in der angegebenen Zeile app.use (bodyParser.json ({limit: '10mb', erweitert: true})) nicht übergeben.
quelle
Auch ich war mit diesem Problem konfrontiert. Ich habe einen dummen Fehler gemacht, indem ich
app.use(bodyParser.json())
Folgendes wiederholt habe :durch Entfernen
app.use(bodyParser.json())
löste das Problem.quelle
In meinem Fall hat das Entfernen
Content-type
aus den Anforderungsheadern funktioniert.quelle
Für mich ist der Haupttrick
bodyParse.json first bodyParse.urlencoded second
quelle
Wenn Sie
express.json()
und bodyParser zusammen verwenden, wird ein Fehler ausgegeben , da Express sein eigenes Limit festlegt.Entfernen Sie den obigen Code und fügen Sie einfach den folgenden Code hinzu
quelle