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 instructions d'utilisation suivantes dans mon express.js
//Set Request Size Limit
app.use(express.limit(100000000));
Dans fiddler, je peux voir l'en-tête content-length avec une valeur de: 1078702
Je crois que c'est en octets, c'est 1,0787 mégaoctets.
Je ne sais pas pourquoi express ne me laisse pas poster le tableau json que je publiais précédemment dans un autre projet express qui n'utilisait pas la structure de projet moyenne.
J'ai eu la même erreur récemment et toutes les solutions que j'ai trouvées ne fonctionnaient pas.
Après quelques recherches, j’ai trouvé que le réglage de app.use(express.bodyParser({limit: '50mb'}));
réglait correctement la limite.
Lors de l'ajout d'un console.log('Limit file size: '+limit);
dans node_modules/express/node_modules/connect/lib/middleware/json.js:46
et du redémarrage du nœud, j'obtiens cette sortie dans la console:
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
Nous pouvons voir qu'au début, lors du chargement du module connect
, la limite est définie sur 1 Mo (1048576 octets). Ensuite, lorsque je définis la limite, le console.log
est appelé à nouveau et cette fois, la limite est de 52428800 (50 Mo). Cependant, je reçois toujours un 413 Request entity too large
.
Puis j'ai ajouté console.log('Limit file size: '+limit);
dans node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
et j'ai vu une autre ligne dans la console lors de l'appel de la route avec une requête volumineuse (avant la sortie d'erreur):
Limit file size: 1048576
Cela signifie que quelque part, connect
réinitialise le paramètre limit et ignore ce que nous avons spécifié. J'ai essayé de spécifier les paramètres bodyParser
dans la définition de route individuellement, mais sans succès.
Bien que je n’aie trouvé aucun moyen approprié de le configurer de manière permanente, vous pouvez le "corriger" 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
:
limit = 52428800; // for 50mb, this corresponds to the size in bytes
Le numéro de ligne peut différer si vous n'exécutez pas la même version d'Express . Notez que ceci est bad practice et qu'il sera écrasé si vous mettez à jour votre module.
Donc, cette solution temporaire fonctionne pour le moment, mais dès qu'une solution est trouvée (ou le module corrigé, s'il s'agit d'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.
[edit - a trouvé la solution]
Après quelques recherches et tests, j'ai constaté que lors du débogage, j'avais ajouté app.use(express.bodyParser({limit: '50mb'}));
, mais afterapp.use(express.json());
. Express définirait ensuite la limite globale sur 1 Mo. Le premier analyseur rencontré lors de l'exécution du script était express.json()
. Déplacer bodyParser
ci-dessus a fait l'affaire.
Cela dit, la méthode bodyParser()
sera obsolète dans Connect 3.0 et ne devrait pas être utilisée. Au lieu de cela, vous devez déclarer explicitement vos analyseurs, comme ceci:
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
Si vous avez besoin de plusieurs parties (pour le téléchargement de fichiers), voir cet article .
Deuxième édition
Notez que dans Express 4, au lieu de express.json()
et express.urlencoded()
, vous devez exiger le module analyseur de corps et utiliser ses méthodes json()
et urlencoded()
, comme suit:
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
Si l'option extended
n'est pas explicitement définie pour bodyParser.urlencoded()
, un avertissement (body-parser deprecated undefined extended: provide extended option
) sera émis. En effet, cette option sera requise dans la prochaine version et not ne sera plus facultative. Pour plus d'informations sur l'option extended
, veuillez vous reporter au readme du body-parser
.
J'utilise Express 4.
Dans mon cas, il ne suffisait pas d'ajouter ces lignes:
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
J'ai essayé d'ajouter l'option parameterLimit à la fonction urlencoded car la documentation l'indique et l'erreur ne s'affiche plus.
L'option parameterLimit contrôle le nombre maximal de paramètres qui sont autorisés dans les données encodées en URL. Si une demande contient plus de Si cette valeur est inférieure à 41, un 413 sera renvoyé au client . La valeur par défaut est 1000.
Essayez avec ce code:
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
Si quelqu'un essayait toutes les réponses mais n'avait pas encore eu de succès et utilisait NGINX pour héberger le site, ajoutez cette ligne à/etc/nginx/sites-available
client_max_body_size 100M; #100mb
Je ne pense pas que ce soit la limite de taille globale expresse, mais plus précisément la limite de middleware connect.json . Cela correspond à 100 Ko par défaut lorsque vous utilisez express.bodyParser()
et ne fournissez pas d’option limit
.
Essayer:
app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);
dans mon cas .. paramètre parameterLimit:50000
résolu le problème
app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit:50000
}));
2016, rien de ce qui précède n'a fonctionné pour moi jusqu'à ce que je définisse explicitement le «type» en plus de la «limite» pour Bodyparser, exemple:
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-urlencoding' })
app.use(jsonParser);
app.use(urlencodedParser);
Ce qui suit a fonctionné pour moi ... Il suffit d'utiliser
app.use(bodyParser({limit: '50mb'}));
c'est tout.
J'ai essayé tout ce qui précède et aucun n'a fonctionné. Constaté que même si nous utilisons comme suit,
app.use(bodyParser());
app.use(bodyParser({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb'}));
seule la 1ère app.use(bodyParser());
est définie et les deux dernières lignes sont ignorées.
Voir: https://github.com/expressjs/body-parser/issues/176 >> voir 'dougwilson a commenté le 17 juin 2016'
Petit vieux post mais j'ai eu le même problème
En utilisant express 4. + , Mon code ressemble à ceci et il fonctionne très bien après deux jours de tests approfondis.
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);
});
});
};
Après plusieurs tentatives j'ai eu ma solution
J'ai commenté cette ligne
app.use(bodyParser.json());
et je mets
app.use(bodyParser.json({limit: '50mb'}))
Puis ça marche
Pour express ~ 4.16.0, express.json avec limit fonctionne directement
app.use(express.json({limit: '50mb'}));
J'ai utilisé une autre pratique pour résoudre ce problème de dépendance multer.
Exemple:
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);
};
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 trop importante mais sans raison valable. S'il n'y a aucune raison valable pour cela, réfléchissez à la raison pour laquelle il est si gonflé en premier lieu.
Par exemple, dans notre cas, une application angulaire envoyait avec avidité un objet entier dans la charge utile. Lorsqu'une propriété gonflée et redondante était supprimée, la taille de la charge utile était réduite d'un facteur 100. Cela a considérablement amélioré les performances et résolu l’erreur 413.
Dans mon cas, le problème était sur Configuration Nginx . Pour le résoudre, je dois éditer le fichier: /etc/nginx/nginx.conf
et ajouter cette ligne dans le bloc serveur:
client_max_body_size 5M;
Redémarrez Nginx et les problèmes sont résolus
Sudo systemctl restart nginx
pour moi, l'extrait suivant a résolu le problème.
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
Moi aussi j'ai fait face à ce problème, je faisais une erreur stupide en répétant la app.use(bodyParser.json())
comme ci-dessous:
app.use(bodyParser.json())
app.use(bodyParser.json({ limit: '50mb' }))
en supprimant app.use(bodyParser.json())
, a résolu le problème.
La meilleure utilisation que vous pouvez spécifier la limite de la taille de votre fichier tel qu’il est montré dans la ligne donnée
app.use (bodyParser.json ({limite: '10mb', extended: true})) app.use (bodyParser.urlencoded ({limite: '10mb', extended: true}))
Vous pouvez également modifier le paramètre par défaut dans l'analyseur de corps de modules de nœuds, puis dans le dossier lib, il existe un fichier JSON et un fichier texte. Puis changez 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})).
Pour moi, le principal truc est
app.use(bodyParser.json({
limit: '20mb'
}));
app.use(bodyParser.urlencoded({
limit: '20mb',
parameterLimit: 100000,
extended: true
}));
bodyParse.json en premier bodyParse.urlencoded second