Wie werden mehrteilige Feld- / Dateidaten separat analysiert?

9

Ich möchte ein mehrteiliges Formular zweimal analysieren: einmal, um die eingehenden Felder abzurufen und später, um den Datei-Upload zu verarbeiten.

Ich versuche, eine ordnungsgemäße Trennung der Bedenken in meiner Node-App aufrechtzuerhalten:

  • Der Controller ist für die Bearbeitung der eingehenden Felder verantwortlich.
  • Das Modell ist für die Logik der Upload-Datei verantwortlich.

Ich muss die Felddaten an das Modell übergeben, um eine neue Instanz zu erstellen. Daher müssen die Felddaten verfügbar sein, bevor der Datei-Upload beginnt.

Derzeit form.parse()analysiert jede oder eine gleichwertige Funktion sowohl Felder als auch Dateien zusammen . Beispiel: req.pipe(busboy)Behandelt sowohl Dateien als auch Felder zusammen.

Ich habe Module wie Node-Multiparty, Formidable, Busboy, Multer überprüft. Niemand scheint eine Lösung dafür zu haben.

Ein Beispiel dafür, was ich erreichen möchte, ist hier: /programming/22336177/node-js-busboy-parse-fields-and-files-seperatly

Ist das überhaupt möglich?

Scott
quelle
2
Warten Sie ... also wird das Modell für Logik und Kontrolle verantwortlich sein?
Matthew Mark Miller
Guter Fang, normalerweise ist diese Architektur schlecht, um die Bedenken zu verwechseln. Dies war vor 2 Jahren, daher erinnere ich mich nicht genau, welches Problem ich gelöst habe, als ich diese Frage gestellt habe, aber ich erinnere mich, dass ich wollte, dass die Sicherungslogik Teil des Mongoose-Schemaobjekts ist. Mit der Mungo-Methode im Modell konnte ich problemlos von überall in meiner App speichern. Rückblickend denke ich nicht, dass die Speichermethode generisch genug ist, um eine Modellmethode zu sein, wahrscheinlich sollte sie als separate Dienstmethode beibehalten werden. mongoosejs.com/docs/guide.html
Scott
1
lol ich hatte nicht bemerkt, wie alt das war ... es floss irgendwie an die Spitze meiner Warteschlange "Antworten müssen". und ja, ich denke, es ist richtig, Persistenzoperationen von den Daten getrennt zu halten, die INSBESONDERE beibehalten werden, INSBESONDERE, wenn diese Objekte Daten in zwei Dimensionen übertragen. Erleichtert das Versauen und Beharren von Dingen außerhalb des Controllers.
Matthew Mark Miller
@Scott "Das war vor 2 Jahren, daher kann ich mich nicht genau erinnern, welches Problem ich gelöst habe, als ich diese Frage gestellt habe" - dann können Sie diese Frage löschen, da es unwahrscheinlich ist, dass sie überhaupt beantwortet wird ...
Timothy Truckle

Antworten:

1

Ich möchte diese Frage beantworten:

Ist es möglich, die mehrteiligen Feldüberschriften vor ihrem Inhalt zu lesen?

Wenn ich mir den mehrteiligen RFC ansehe , sehe ich dieses Beispiel:

From:  Nathaniel Borenstein <[email protected]> 
To: Ned Freed <[email protected]> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

Ich stelle fest, dass sich die Header wie Content-Typezwischen den Körperteilen befinden. Daraus schließe ich, dass Sie nicht alle Überschriften vor allen Körpern haben können.

Nun zu Ihrer Frage:

Ich möchte ein mehrteiliges Formular zweimal analysieren: einmal, um die eingehenden Felder abzurufen und später, um den Datei-Upload zu verarbeiten.

Es kommt darauf an, was Sie unter "Parsen" verstehen. Beim Lesen der HTTP-Nachricht ist eine Analyse erforderlich, um festzustellen, wann sie endet. Das Ende hat eine zusätzliche --am Ende:

--boundary42--

Ideen zum zweimaligen Parsen:

  • Ich schließe daraus, dass man in der Lage sein sollte, die gesamte Antwort aus dem Socket zu kopieren und später zu analysieren.
  • Sie können die Header der Datei vor dem Hauptteil der Datei lesen, jedoch nicht alle Header aller Dateien.

Ist das überhaupt möglich?

Ja, es gibt Fälle, in denen dies möglich ist (wenn die Datei das letzte ist, was Sie hochladen). Ich weiß nicht, ob es allgemein möglich ist, was Sie brauchen, da ich nicht genau weiß, was Sie tun möchten.

Ich hoffe das klärt die Dinge. Wenn dies keine vollständige Antwort ist oder Sie dies nicht mögen, teilen Sie uns bitte mit, warum dies so ist, da dies ein wertvolles Feedback für andere sein kann, die versuchen, die Frage zu beantworten.

Nutzer
quelle