J’ai pour tâche de télécharger des données d’utilisateur en bloc via un fichier csv. J’utilise nodejs
et express
framework express
. Lorsque je soumets un fichier csv contenant 60 à 70 lignes, cela fonctionne correctement, mais lorsqu’il dépasse 70 lignes, le nombre d’erreurs de serveur générées est trop élevé. Après quelques recherches, j’ai conclu que c’était peut-être le problème de la taille de l’parsingur de corps, alors j’ai essayé ce blog , mais cela n’a pas fonctionné. L’erreur est toujours la même.
voici mon code pour l’parsingur de corps:
var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); app.use(cookieParser()); app.use(bodyParser({limit: '50mb'})); app.use(bodyParser.json({limit: '50mb'})); app.use(bodyParser.urlencoded({ extended: false }));
Message d’erreur:
2016-04-19T10:29:45.299Z - error: [req#d3a1fa1a-278e-496e-9cb1-b3a944e3d1c8/app] [App] Error: too many parameters Error: too many parameters at queryparse (d:\Git\gap-vm 13416\node_modules\body-parser\lib\types\urlencoded.js:119:17) at parse (d:\Git\gap-vm 13416\node_modules\body-parser\lib\types\urlencoded.js:64:9) at d:\Git\gap-vm 13416\node_modules\body-parser\lib\read.js:91:18 at IncomingMessage.onEnd (d:\Git\gap-vm 13416\node_modules\raw-body\index.js:136:7) at IncomingMessage.g (events.js:273:16) at emitNone (events.js:80:13) at IncomingMessage.emit (events.js:179:7) at endReadableNT (_stream_readable.js:906:12) at nextTickCallbackWith2Args (node.js:474:9) at process._tickCallback (node.js:388:17)
Alors, quelqu’un peut-il me dire où je me trompe? Toute suggestion serait utile. Merci d’avance.
Comme d’autres le mentionnent, vous devez définir le parameterLimit
pour traiter l’erreur “too many parameters”. Vous devrez peut-être également définir une limit
supérieure pour éviter une erreur de taille de chargement. Dans le cas de CSV, les limites codées en url seront appliquées, mais d’autres voudront peut-être également définir les limites JSON. Le paramètre suivant fonctionnera à moins que d’autres codes dans le code ne remplacent ces parameters:
var bodyParser = require('body-parser'); app.use(bodyParser.json({limit: '50mb'})); app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000}));
Dans votre code, vous n’utilisez pas du tout le parameterLimit
settingLimit, comme indiqué dans le blog que vous avez lié.
var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: false, parameterLimit: 1000000 // experiment with this parameter and tweak }));
Je ne sais pas trop où vous testez votre API, mais pour moi, c’est parce que j’ai défini l’en Content-Type
tête Content-Type
sur application/x-www-form-urlencoded
dans Postman. Une fois que j’ai supprimé l’en-tête et utilisé les form-data
sous la section body, le problème a été résolu. Assurez-vous de toujours utiliser form-data
lors du téléchargement de fichiers. J’espère que ça aide…