ERREUR:
<form action="warranty" method="post" enctype="multipart/form-data"> <b>Warranty Claim Form</b> <h6>Rider Info</h6> <div class="row"> <div> <input type="" name="warranty[firstName]" placeholder="First Name*"> </div> <div> <input type="" name="warranty[lastName]" placeholder="Last Name*"> </div> <div> <input type="" name="warranty[streetAdress]" placeholder="Street Adress*"> </div> <div> <input type="" name="warranty[streetAdressLine]" placeholder="Street Adress Line 2"> </div> <div> <input name="warranty[city]" placeholder="City*"> </div> <div> <input type="" name="warranty[state]" placeholder="State/Province*"> </div> <div> <input type="" name="warranty[zip]" placeholder="ZIP/Postal code*"> </div> <div> <input type="" name="warranty[country]" placeholder="Country*"> </div> <div> <input type="" name="warranty[email]" placeholder="Email*"> </div> <div> <input type="" name="warranty[phoneNumber]" placeholder="Phone Number*"> </div> </div> <h6>Product Details</h6> <div class="row"> <div> <input name="warranty[product]" placeholder="Product (Ex. Titan II Frame)*"> </div> <div> <input type="" name="warranty[color]" placeholder="Color (Ex. Black)"> </div> <div> <input type="" name="warranty[size]" placeholder="Size (Ex. 20.5in / 175mm)"> </div> <div> <input type="" name="warranty[serialNumber]" placeholder="Serial number or date code (bikes, frames, forks, bars, cranks only)"> </div> </div> <h6>PURCHASE & ASSEMBLY DETAILS</h6> <div class="row"> <div > <input name="warranty[bikeShop]" placeholder="Bike Shop or online retailer*"> </div> <div> <input type="" name="warranty[modelYear]" placeholder="Model year (Ex.2015)"> </div> <div > <input type="" name="warranty[assembledBy]" placeholder="Assembled by myself/ bike shop"> </div> </div> <h6>PRODUCT ISSUE/DEFECT INFORMATION</h6> <div class="row"> <div> <textarea name="warranty[issue]"></textarea> </div> </div> <h6>UPLOAD PROOF OF PURCHASE OR RECEIPT (SCAN OR MOBILE PHOTO)</h6> <div> <input type="file" name="purchasePhoto" id="fileOne"> <label for="fileOne"> <span>Upload file</span> </label> </div> <h6>UPLOAD PRODUCT IMAGES, INCLUDING IMAGES OF DEFECTS</h6> <div class="form-group"> <input type="file" name="defectPhoto" id="fileTwo"> <label for="fileTwo"> <span>Upload file</span> </label> </div> <div> <button type="submit"><p>Submit</p></button> </div> </form>
3 Réponses :
Déplacez votre code dans le rappel du mautre
router.post("/warranty", function(req, res) { upload(req, res, function(err) { if (err) { req.flash("error", "Multer Error"); return res.redirect("/pages/warranty#flash"); } var { firstName, lastName, streetAdress, city, state, zip, country, email, phoneNumber, product, bikeShop, assembledBy, issue } = req.body.warranty; var newWarranry = { purchasePhoto: purchasePhoto, defectPhoto: defectPhoto, firstName: firstName, lastName: lastName, streetAdress: streetAdress, city: city, state: state, zip: zip, country: country, email: email, phoneNumber: phoneNumber, product: product, bikeShop: bikeShop, assembledBy: assembledBy, issue: issue }; if ( !firstName || !lastName || !streetAdress || !city || !state || !zip || !country || !email || !phoneNumber || !product || !bikeShop || !assembledBy ) { req.flash("error", 'Please enter all of the fields with "*"'); return res.redirect("/pages/warranty#flash"); } else { Warranty.create(newWarranry, function(err, newWarranry) { if (err) { console.log(err); } else { console.log(newWarranry); req.flash( "success", "Thank you! The form was submitted successfully." ); return res.redirect("/pages/warranty#flash"); } }); } }); });
Le problème n'est pas avec la façon dont nous envoyons des données, plutôt que la bibliothèque de muletier est incapable d'analyser les fichiers multiples du formulaire.
Utilisez MULTER.ARRAY méthode et il doit fonctionner comme attendez-vous, j'ai essayé le même exemple que vous avez donné semble fonctionner comme prévu. p>
à l'intérieur app.js code>, utilisez app.use (upload.array ()) code>, où le téléchargement est une instance de Multer. P>
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
let bodyParser = require('body-parser');
//******* require multer library ******
var multer = require('multer');
var upload = multer();
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// ***** this line important
app.use(upload.array());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
Merci, cela a résolu une erreur, mais quand je télécharge des images, j'ai MulterError: champ inattendu. Dois-je changer de code de muletier d'usage sur Multer ({}). Array?
Mon problème était que j'ai utilisé mais je devais utiliser p>