Rumah  >  Artikel  >  hujung hadapan web  >  Menghijrahkan node-fetch/form-data ke API asli Node.js

Menghijrahkan node-fetch/form-data ke API asli Node.js

王林
王林asal
2024-07-28 06:07:021136semak imbas

Migrating node-fetch/form-data to Node.js native APIs

Keluaran Node v16.15.0 dan v17.5.0 dibawa masuk Fetch API dan FormData. Sebelum itu, pakej pengambilan nod dan data borang digunakan untuk menggunakan API seperti pelayar dalam Node.js. Untuk memindahkan pakej node-fetch/form-data ke API asli Node.js, beberapa perubahan boleh dibuat dengan mengalih keluar pernyataan import pakej pihak ketiga, tetapi terdapat pertimbangan penting yang perlu diingat apabila menggunakan ciri Node.js seperti fail sistem. Artikel ini menggariskan tentang perpindahan daripada pakej node-fetch/form-data ke API asli Node.js.

Gambaran keseluruhan migrasi

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

Butiran

Ketidakserasian jenis

Pakej form-data dan Node.js FormData tidak serasi dan tidak boleh dihantar terus dengan Fetch API. Jika anda menghantar data borang kepada API Ambil asli, kandungan permintaan akan menjadi rentetan [objek FormData].

import FormData from 'form-data';

const form = new FormData();
await fetch('https://example.com/upload', {
  method: 'POST',
  body: form,
});

// [object FormData]

Pakej data borang menerima fs.ReadStream dalam Node.js. API asli menerima Blob yang serasi dengan penyemak imbas. Untuk mencipta Blob daripada fail, kami boleh menyaman fs.openAsBlob(), ditambah dalam Node.js v19.8.0. Jika anda menghantar fs.ReadStream kepada FormData API asli, nilainya ialah [objek Objek].

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]

Ketidakserasian tingkah laku dalaman

Pakej data borang memperoleh nama fail daripada fs.ReadStream dan menggunakannya sebagai medan nama fail (pelaksanaan dalaman). Ia juga menentukan jenis fail daripada nama fail dan menetapkan pengepala Jenis Kandungan (pelaksanaan dalaman).

Blob tidak mempunyai nama fail, ia perlu dinyatakan secara manual. FormData API asli menjadi lalai kepada strim aplikasi/oktet jika Jenis Kandungan tidak dinyatakan. Kami boleh menentukan Content-Type secara eksplisit daripada hujah fs.openAsBlob().

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

Kesimpulan

Fetch API dan FormData telah menjadi Kestabilan: 2 (Stabil) daripada Node.js v21.0.0. fs.openAsBlob() masih Kestabilan: 1 (Percubaan) dalam versi terkini Node.js (v22.5.1 pada 27 Julai 2024). Kita perlu berhati-hati apabila berjalan dalam masa jalan lama atau menggunakan API percubaan yang mempunyai potensi perubahan ciri.

Atas ialah kandungan terperinci Menghijrahkan node-fetch/form-data ke API asli Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn