Ich habe Probleme, herauszufinden, wie verhindert werden kann, dass Multer eine Datei hochlädt, wenn bereits ein Eintrag zur Datenbank hinzugefügt wurde.Mehrteilige Formulardaten analysieren und dann eine Datei mit Multer hochladen (Knotenmodul)
In meinem Szenario habe ich ein mehrteiliges Formular, wo Sie Biere mit einer ID hinzufügen können. Es hat 2 Eingänge, einen mit einer Texteingabe (id) und einen weiteren mit einer Dateieingabe (bierImage).
Ich möchte vor dem Hochladen einer Datei prüfen, ob sie bereits in der Datenbank vorhanden ist und, falls nicht, die Datei hochladen. Momentan lädt mein Code die Datei zuerst hoch und prüft dann, ob sie existiert, und das ist eine schlechte Sache!
, dass mein Code ist:
var express = require('express');
var router = express.Router();
var multer = require('multer');
var database = require('../services/database');
var upload = multer({ dest: 'uploads/' });
var cpUpload = upload.fields([{ name: 'beerImage', maxCount: 1 } ]);
router.route('/beers')
.post(function (req, res, next) {
// I'd like to use req.body.id in the query here, but it doesn't exist yet!
cpUpload(req, res, function (err) {
if (err) {
return next(new Error('Error uploading file: ' + err.message + ' (' + err.field + ')'));
} else {
database.getConnection().done(function (conn) {
conn.query('SELECT COUNT(*) AS beersCount FROM beers WHERE id=?', req.body.id, function (err, rows, fields) {
if (err) {
conn.release();
return next(err);
}
if (rows[0].beersCount > 0) {
conn.release();
return next(new Error('Beer "' + req.body.id + '" already exists!'));
} else {
delete req.body.beerImage;
conn.query('INSERT INTO beers SET ?', req.body, function (err, rows, fields) {
conn.release();
if (err) {
return next(err);
}
res.json({ message: 'Beer "' + req.body.id + '" added!' });
});
}
});
});
}
});
});
module.exports = router;
ich keine Möglichkeit, zunächst die mehrteiliger Datenform „Parse“ finden (in der Lage sein, um die Abfrage zu tun, und überprüfen, ob es req.body.id mit existiert) und dann entscheiden, ob ich die Datei hochladen möchte oder nicht. Es scheint, dass "cpUpload" beide Dinge gleichzeitig tut!
Irgendeine Idee, wie man "req.body.id" zuerst (um die Abfrage zu tun) und dann entscheiden, ob ich die Datei hochladen möchte?
Ist dies die einzige Lösung, erstellen Sie eine temporäre Datei? – Emi
Dies ist eine Sicherheit für Benutzer. Sie können nicht auf die Client-Seite zugreifen. – Martial
Node.js läuft auf dem Server und es ist dort, wo ich überprüfen möchte, ob der Eintrag vorhanden ist, bevor Sie es speichern. – Emi