Comment gérer les données de formulaires multi-parties en Node.js
Découvrez comment récupérer les informations envoyé par un formulaire web. Une traduction de l'article How to handle multipart form data
Classé dans Pour commencer
Traduction
La gestion correcte des données de formulaire et des téléchargements de fichiers est un problème important et complexe pour les serveurs HTTP. Le faire à la main impliquerait d'analyser des données binaires en continu, de les écrire dans le système de fichiers, d'analyser d'autres données de formulaire et plusieurs autres problèmes complexes ; heureusement, seules quelques personnes auront besoin de s'en préoccuper à ce niveau. Felix Geisendorfer, l'un des principaux contributeurs de Node.js, a écrit une bibliothèque appelée node-formidable qui gère toutes les parties difficiles pour vous. Grâce à son API conviviale, vous pouvez analyser des formulaires et recevoir des téléchargements de fichiers en un rien de temps.
var formidable = require('formidable'),
http = require('http'),
util = require('util');
http.createServer(function(req, res) {
// Cette instruction `if` est là pour capter les soumissions de formulaires et lancer l'analyse des données des formulaires multi-parties..
if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
// Instanciation d'un nouveau formulaire `formidable` à traiter.
var form = new formidable.IncomingForm();
// `form.parse` analyse les données du flux entrant, en séparant pour vous les différents champs et fichiers..
form.parse(req, function(err, fields, files) {
if (err) {
// Vérifiez et traitez les erreurs éventuelles ici.
console.error(err.message);
return;
}
res.writeHead(200, {'content-type': 'text/plain'});
res.write('données reçues:\n\n');
// Cette dernière ligne répond à la soumission du formulaire avec une liste des données et des fichiers analysés.
res.end(util.inspect({fields: fields, files: files}));
});
return;
}
// S'il s'agit d'une demande normale, et non d'une soumission de formulaire, alors envoyez le formulaire.
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
}).listen(8080);
Essayez-le vous-même ; c'est certainement la solution la plus simple, et node-formidable est une bibliothèque endurcie, prête pour la production. Laissez la communauté utilisateur résoudre des problèmes comme celui-ci pour vous, afin que vous puissiez vous remettre à écrire le reste de votre code !