Je reçois l'erreur suivante avec 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
J'utilise meanstack. J'ai les déclarations d'utilisation suivantes dans mon express.js
//Set Request Size Limit
app.use(express.limit(100000000));
Dans le violon, je peux voir l'en-tête de la longueur du contenu avec une valeur de: 1078702
Je crois que c'est en octets, c'est 1,0787 mégaoctets.
Je n'ai aucune idée pourquoi express ne me laisse pas publier le tableau json que je publiais précédemment dans un autre projet express qui n'utilisait pas la structure de projet de pile moyenne.
javascript
node.js
http
express
Mike James
la source
la source
Réponses:
J'ai eu la même erreur récemment, et toutes les solutions que j'ai trouvées n'ont pas fonctionné.
Après avoir creusé, j'ai trouvé que le réglage
app.use(express.bodyParser({limit: '50mb'}));
fixait correctement la limite.Lorsque vous ajoutez un
console.log('Limit file size: '+limit);
dansnode_modules/express/node_modules/connect/lib/middleware/json.js:46
et noeud redémarrage, je reçois cette sortie dans la console:Nous pouvons voir qu'au début, lors du chargement du
connect
module, la limite est fixée à 1 Mo (1048576 octets). Ensuite, lorsque j'ai défini la limite, leconsole.log
est appelé à nouveau et cette fois, la limite est 52428800 (50 Mo). Cependant, j'obtiens toujours un413 Request entity too large
.Puis j'ai ajouté
console.log('Limit file size: '+limit);
dansnode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
et vu une autre ligne dans la console lors de l' appel de la route avec une grande demande (avant la sortie d'erreur):Cela signifie qu'en quelque sorte, quelque part,
connect
réinitialise le paramètre de limite et ignore ce que nous avons spécifié. J'ai essayé de spécifier lesbodyParser
paramètres dans la définition de l'itinéraire individuellement, mais pas de chance non plus.Bien que je n'aie trouvé aucun moyen approprié de le définir de manière permanente, vous pouvez le " patcher " directement dans le module. Si vous utilisez Express 3.4.4, ajoutez ceci à la ligne 46 de
node_modules/express/node_modules/connect/lib/middleware/json.js
:Le numéro de ligne peut différer si vous n'exécutez pas la même version d'Express. Veuillez noter qu'il s'agit d'une mauvaise pratique et qu'elle sera remplacée si vous mettez à jour votre module.
Cette solution temporaire fonctionne donc pour l'instant, mais dès qu'une solution est trouvée (ou que le module est corrigé, au cas où ce serait un problème de module), vous devez mettre à jour votre code en conséquence.
J'ai ouvert un problème sur leur GitHub à propos de ce problème.
[modifier - trouvé la solution]
Après quelques recherches et tests, j'ai trouvé que lors du débogage, j'ai ajouté
app.use(express.bodyParser({limit: '50mb'}));
, mais aprèsapp.use(express.json());
. Express définissait alors la limite globale à 1 Mo, car le premier analyseur qu'il avait rencontré lors de l'exécution du script étaitexpress.json()
. Se déplacerbodyParser
au-dessus a fait l'affaire.Cela dit, la
bodyParser()
méthode sera déconseillée dans Connect 3.0 et ne devrait pas être utilisée. Au lieu de cela, vous devez déclarer explicitement vos analyseurs, comme ceci:Dans le cas où vous avez besoin de plusieurs parties (pour les téléchargements de fichiers), consultez cet article .
[deuxième édition]
Notez que dans Express 4, au lieu de
express.json()
etexpress.urlencoded()
, vous devez exiger le module body-parser et utiliser ses méthodesjson()
eturlencoded()
, comme ceci:Si l'
extended
option n'est pas explicitement définie pourbodyParser.urlencoded()
, elle lancera un avertissement (body-parser deprecated undefined extended: provide extended option
). En effet, cette option sera requise dans la prochaine version et ne sera plus optionnelle. Pour plus d'informations sur l'extended
option, vous pouvez vous référer au fichier Lisez - moi debody-parser
.[troisième édition]
Il semble que dans Express v4.16.0, nous pouvons revenir à la manière initiale de le faire (merci à @GBMan pour l'astuce):
la source
app.use(express.json({limit:'50mb'}));
. J'ai modifié ma réponse pour refléter cela!urlencoded
appel413::Request Entity is too large
exception. Il ne transmettra pas la demande à votre application express. Nous devons donc définirclient_max_body_size 50M;
dans la configuration nginx OU une configuration de serveur spécifique OU même une balise d'emplacement spécifique fonctionnera.J'utilise Express 4.
Dans mon cas, il ne suffisait pas d'ajouter ces lignes:
J'ai essayé d'ajouter l'option parameterLimit sur la fonction urlencoded comme le dit la documentation et l'erreur n'apparaît plus.
Essayez avec ce code:
la source
Si quelqu'un a essayé toutes les réponses, mais n'a pas encore réussi et utilise NGINX pour héberger le site, ajoutez cette ligne à / etc / nginx / sites-available
la source
body-parser
renverra unelimit
propriété et unelength
propriété dans l'objet d'erreur (avecstatus:413
). Nginx ne fait pas ça. Donc, si vous ne pouvez pas voir ces propriétés dans l'objet d'erreur, c'est probablement une limite nginx. Voici comment modifier ce paramètre nginx (les fichiers de configuration sont très probablement dans/etc/nginx/sites-available/
)Je ne pense pas que ce soit la limite de taille globale expresse, mais spécifiquement la limite du middleware connect.json . C'est 100 Ko par défaut lorsque vous utilisez
express.bodyParser()
et ne fournissez pas d'limit
option.Essayer:
la source
dans mon cas .. le réglage a
parameterLimit:50000
résolu le problèmela source
body-parser
charge utile par défaut est OK pour moi). A été résolu avec seulement (pas besoin de définir de s).parameterLimit
limit
2016, rien de ce qui précède n'a fonctionné pour moi jusqu'à ce que j'explique explicitement le `` type '' en plus de la `` limite '' pour le bodyparser, par exemple:
la source
application/x-www-form-urlencoded
(plutôt queapplication/x-www-form-urlencoding
)?Ce qui suit a fonctionné pour moi ... Utilisez simplement
c'est ça.
J'ai essayé tout au-dessus et aucun n'a fonctionné. Trouvé que même si nous utilisons comme suit,
seule la 1ère
app.use(bodyParser());
est définie et les deux dernières lignes ont été ignorées.Référez-vous à: https://github.com/expressjs/body-parser/issues/176 >> voir 'dougwilson commenté le 17 juin 2016'
la source
Pour express ~ 4.16.0, express.json avec limite fonctionne directement
la source
Dans mon cas, le problème était sur la configuration de Nginx . Pour le résoudre, je dois éditer le fichier:
/etc/nginx/nginx.conf
et ajouter cette ligne dans le bloc serveur:Redémarrez Nginx et les problèmes ont disparu
la source
J'ai utilisé une autre pratique pour ce problème avec la dépendance du mulet.
Exemple:
la source
Petit vieux poste mais j'ai eu le même problème
Utiliser express 4. + mon code ressemble à ceci et il fonctionne très bien après deux jours de tests approfondis.
la source
Une approche légèrement différente - la charge utile est trop GRANDE
Jusqu'à présent, toutes les réponses utiles concernent l'augmentation de la limite de charge utile. Mais il se peut aussi que la charge utile soit en effet trop grande mais sans raison valable. S'il n'y a aucune raison valable pour cela, envisagez d'abord pourquoi il est si gonflé.
Notre propre expérience
Par exemple, dans notre cas, une application Angular envoyait goulûment un objet entier dans la charge utile. Lorsqu'une propriété gonflée et redondante a été supprimée, la taille de la charge utile a été réduite d'un facteur 100 . Cela a considérablement amélioré les performances et résolu l'erreur 413.
la source
Après many de nombreux essais, j'ai obtenu ma solution
J'ai commenté cette ligne
et je mets
Alors ça marche
la source
pour moi, l'extrait suivant a résolu le problème.
la source
Pour une meilleure utilisation, vous pouvez spécifier la limite de la taille de votre fichier comme indiqué dans les lignes données:
Vous pouvez également modifier le paramètre par défaut dans node-modules body-parser puis dans le dossier lib, il y a JSON et le fichier texte. Modifiez ensuite la limite ici. En fait, cette condition passe si vous ne passez pas le paramètre limit dans la ligne donnée app.use (bodyParser.json ({limit: '10mb', extended: true})).
la source
Moi aussi, j'ai fait face à ce problème, je faisais une erreur stupide en répétant ce qui
app.use(bodyParser.json())
suit ci-dessous:en supprimant
app.use(bodyParser.json())
, résolu le problème.la source
Dans mon cas, la suppression
Content-type
des en-têtes de demande a fonctionné.la source
Pour moi, le truc principal est
bodyParse.json premier bodyParse.urlencoded deuxième
la source
Si vous utilisez
express.json()
et bodyParser ensemble, cela donnera une erreur car express définit sa propre limite.supprimer le code ci-dessus et ajouter simplement le code ci-dessous
la source