Multer access-req.Körper ohne hochladen von Dateien

Ich habe ein Formular mit einigen Textfeldern und file-inputs, die nicht leer sein, ich möchte einige Operationen mit den Textfeldern ersten(hinzufügen zur Datenbank) und ob diese Operationen erfolgreich waren dann die Dateien hochladen. Das ist mein code jetzt :

var multer = require('multer');
var getFields = multer();
router.post('/add',getFields.array(),function(req,res){
var artist = new ArtistModel({
            name : req.body.name.toLowerCase(),
            description:req.body.description,
          });

Ich dann hinzufügen Künstlers zu meiner DB und in der erfolgreichen Rückruf ich möchte die Dateien, die hochgeladen werden. Das problem ist jedoch ich kann nicht einfach verwenden getFields.array (), weil ich Datei-Eingänge und-bekomme ich „Unerwarteter Felder“ error, und wenn ich nicht verwenden .array() habe ich nicht in der Lage, die post-request-body. Ist es überhaupt um die form von Textfeldern mit enctype=“multipart/form-data“ und dann die Dateien hochladen?

Update #2
Dank Dave ich war in der Lage, um die text-Felder ohne hochladen von Dateien , die ich erfolgreich meine Künstlerin, meine Datenbank, aber ich konnte nicht herausfinden, wie man die Dateien hochladen danach,
Ich habe eine neue variable in der callback-Funktion meines addToDb :

var storage = multer.diskStorage({
            destination: function (req, file, cb) {
              //cb(null, 'artistsMedia/drake/songs')
              var dir = 'artistsMedia/' + req.body.name.toLowerCase()+ '/images';
              mkdirp(dir,err => cb(err,dir))
            },
            filename: function (req, file, cb) {
              cb(null, req.body.name.toLowerCase() +'-'+ file.fieldname +'-'+ Date.now() + path.extname(file.originalname)) //Appending extension
            },

          });
          var upload = multer({
            storage: storage,
            limits :{fileSize :52428800}
          }).fields([{name:'Logo',maxCount:1},{name:'artistHome',maxCount:1},{name:'otherImgs',maxCount:10}]);

jedoch Berufung upload(req,res,err) scheint nicht zu funktionieren.

  • Wenn Sie möchten, laden Sie die Dateien nach der Erstellung des Künstlers, der REST Weg, es zu tun zu schaffen, ist der Künstler, zurückgeben 201 ERSTELLTE Antwort mit einem Location-header der Antwort (und vielleicht auch die ein Körper mit der neu erstellten Objekts). Ihr Kunde würde dann Parsen der Antwort des Körpers oder der response-header zu bestimmen, die ID des neuen Objekts und dann eine zweite Anfrage nach den Dateien. (Oder Sie können die Dateien senden mit der ersten Anfrage und tun es alle auf einmal).



One Reply
  1. 2

    Versuchen mit multer ist any() Funktion:

    var multer = require('multer');
    var getFields = multer();
    router.post('/add',getFields.any(),function(req,res){
      //any files, if sent, will be in req.files 
      var artist = new ArtistModel({
        name : req.body.name.toLowerCase(),
        description:req.body.description,
      });
    });

    Wenn Sie sicher sind, es werden keine Dateien übermittelt werden, verwenden multer ist none() Funktion:

    var multer = require('multer');
    var getFields = multer();
    router.post('/add',getFields.none(),function(req,res){
      //uploading files will cause an error
      var artist = new ArtistModel({
        name : req.body.name.toLowerCase(),
        description:req.body.description,
      });
    });

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.