0
votes

Req.body est un objet vide, TypeError:

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>


0 commentaires

3 Réponses :


0
votes

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");
        }
      });
    }
  });
});


0 commentaires

0
votes

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);


1 commentaires

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?



0
votes

Mon problème était que j'ai utilisé xxx

mais je devais utiliser xxx


0 commentaires