In Node.js esiste una soluzione specifica per gestire i campi testuali in un form di upload.
La soluzione consiste nell'usare il package formidable:
'use strict';
const express = require('express');
const path = require('path');
const fs = require('fs');
const formidable = require('formidable');
const port = process.env.PORT || 8080;
const app = express();
const ABSPATH = path.dirname(process.mainModule.filename);
app.post('/upload', function(req, res) {
let form = new formidable.IncomingForm();
form.multiples = false;
form.uploadDir = ABSPATH + '/uploads';
form.on('file', function(field, file) {
fs.rename(file.path, path.join(form.uploadDir, file.name));
});
form.on('error', function(err) {
// Gestion errori
});
form.parse(req, function(err, fields, files) {
// Gestione richiesta
});
});
app.listen(port);
Il metodo .parse()
ci permette di accedere agli oggetti fields
e files
che contengono rispettivamente i campi
testuali del form e il campo file. I nomi delle proprietà di questi oggetti sono dati dagli attributi name
degli elementi del form.