Heim > Artikel > Web-Frontend > Migration von Node-Fetch/Form-Daten zu den nativen APIs von Node.js
Mit der Veröffentlichung von Node v16.15.0 und v17.5.0 wurden die Fetch-API und FormData eingeführt. Zuvor wurden die Pakete node-fetch und form-data verwendet, um browserähnliche APIs in Node.js zu verwenden. Um Node-Fetch-/Formulardatenpakete zu den nativen APIs von Node.j zu migrieren, können einige Änderungen vorgenommen werden, indem Importanweisungen von Paketen von Drittanbietern entfernt werden. Bei der Verwendung von Node.js-Funktionen wie „File“ sind jedoch wichtige Überlegungen zu beachten System. In diesem Artikel wird die Migration von Node-Fetch-/Form-Data-Paketen zu den nativen Node.js-APIs beschrieben.
import fs from 'node:fs'; -import FormData from 'form-data'; -import fetch from 'node-fetch'; -const file = fs.createReadStream('secret.txt'); +const file = await fs.openAsBlob('secret.txt', { type: 'text/plain' }); const form = new FormData(); -form.append('file', file); +form.append('file', file, 'secret.txt'); const response = await fetch('https://example.com/upload', { method: 'POST', body: form, });
Das form-data-Paket und Node.js FormData sind nicht kompatibel und können nicht direkt mit der Fetch-API übergeben werden. Wenn Sie form-data an die native Fetch-API übergeben, ist der Anforderungstext die Zeichenfolge [object FormData].
import FormData from 'form-data'; const form = new FormData(); await fetch('https://example.com/upload', { method: 'POST', body: form, }); // [object FormData]
Das Formulardatenpaket akzeptiert fs.ReadStream in Node.js. Die native API akzeptiert einen browserkompatiblen Blob. Um einen Blob aus einer Datei zu erstellen, können wir fs.openAsBlob() verwenden, das in Node.js v19.8.0 hinzugefügt wurde. Wenn Sie fs.ReadStream an FormData der nativen API übergeben, lautet der Wert [object Object].
import fs from 'node:fs'; const file = fs.createReadStream('secret.txt'); const form = new FormData(); form.append('file', file); // Content-Disposition: form-data; name="file" // // [object Object]
Das Formulardatenpaket erhält den Dateinamen von fs.ReadStream und verwendet ihn als Dateinamensfeld (interne Implementierung). Es ermittelt außerdem den Dateityp anhand des Dateinamens und legt den Content-Type-Header fest (interne Implementierung).
Blob hat keinen Dateinamen, er muss manuell angegeben werden. Die FormData der nativen API sind standardmäßig application/octet-stream, wenn der Content-Type nicht angegeben ist. Wir können den Content-Type explizit aus dem Argument von fs.openAsBlob().
angeben
const file = await fs.openAsBlob('secret.txt'); const form = new FormData(); form.append('file', file); // Content-Disposition: form-data; name="file"; filename="blob" // Content-Type: application/octet-stream
const file = await fs.openAsBlob('secret.txt', { type: 'text/plain' }); const form = new FormData(); form.append('file', file, 'secret.txt'); // Content-Disposition: form-data; name="file"; filename="secret.txt" // Content-Type: text/plain
Fetch API und FormData sind ab Node.js v21.0.0 zu Stability: 2 (Stable) geworden. fs.openAsBlob() ist immer noch Stabilität: 1 (experimentell) in der neuesten Version von Node.js (v22.5.1 vom 27. Juli 2024). Wir müssen vorsichtig sein, wenn wir alte Laufzeiten verwenden oder experimentelle APIs verwenden, die potenzielle Funktionsänderungen mit sich bringen.
Das obige ist der detaillierte Inhalt vonMigration von Node-Fetch/Form-Daten zu den nativen APIs von Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!