Ralat penimbal dalam nodejs

WBOY
WBOYasal
2023-05-25 12:55:071173semak imbas

Node.js ialah persekitaran masa jalan JavaScript moden dan salah satu alat teras untuk banyak aplikasi. Antaranya, Buffer ialah jenis data penting dalam Node.js Ia digunakan untuk mengendalikan data binari dan merupakan salah satu asas untuk Node.js mengendalikan operasi I/O. Walau bagaimanapun, dalam Node.js, pelbagai ralat akan muncul dalam Penampan Bagaimana untuk menyelesaikan masalah ini?

  1. Ralat 1: TypeError: Argumen mestilah rentetan atau Buffer

Ralat ini bermakna parameter yang dihantar ke dalam fungsi mestilah rentetan atau jenis Buffer, tetapi parameter sebenar diluluskan dalam Parameter yang dimasukkan bukan. Ralat ini biasanya berlaku apabila beroperasi pada objek Penampan.

Penyelesaian:

  • Sahkan sama ada jenis parameter masuk adalah betul. Anda boleh menggunakan typeof atau instanceof untuk menilai.
  • Jika parameter masuk adalah daripada jenis rentetan, anda boleh memanggil kaedah Buffer.from() untuk menukarnya kepada jenis Buffer.
  • Jika parameter masuk ialah jenis bukan rentetan atau bukan Penampan, anda boleh menukarnya kepada rentetan dahulu dan kemudian melaksanakan operasi.

Kod sampel:

let str = 'hello world';
let buffer = Buffer.from(str);
  1. Ralat 2: TypeError [ERR_INVALID_ARG_TYPE]: Argumen "chunk" mestilah salah satu daripada jenis rentetan atau Penampan

Sebab ralat ini ialah beberapa kaedah terbina dalam Node.js mempunyai keperluan untuk jenis data yang dihantar, tetapi jenis data yang dihantar tidak memenuhi keperluan.

Penyelesaian:

  • Sahkan jenis data yang diperlukan oleh fungsi dan semak sama ada jenis data masuk memenuhi keperluan.
  • Jika jenis data yang dihantar tidak memenuhi keperluan, anda boleh menukarnya kepada jenis yang betul sebelum menghantarnya.

Kod sampel:

const fs = require('fs');
const path = require('path');

let filePath = path.resolve(__dirname, 'file.txt');
let data = 'hello world';

fs.writeFile(filePath, Buffer.from(data), (err) => {
   if(err) throw err;
   console.log('File has been saved.');
});
  1. Ralat 3: RangeError: Panjang tatasusunan ditaip tidak sah

Sebab ralat ini ialah apabila mencipta TypedArray , Parameter yang dihantar melebihi panjang maksimum yang disokongnya.

Penyelesaian:

  • Sahkan sama ada parameter masuk melebihi panjang maksimum yang disokong oleh TypedArray.
  • Jika panjang maksimum yang disokong oleh TypedArray melebihi, anda boleh cuba membuat TypedArray dalam kepingan.

Kod sampel:

let data = new Uint8Array(10000000000); // 报错:RangeError: Invalid typed array length
const chunkSize = 5000000;
let buffer = new Buffer(chunkSize);

for(let i = 0; i < 10000000000; i += chunkSize){
    let array = new Uint8Array(buffer);
    // ...
}
  1. Ralat 4: TypeError: Tidak boleh membaca sifat 'byteLength' undefined

Ralat ini biasanya berlaku apabila menggunakan TypedArray, kerana objek TypedArray mesti dikaitkan dengan contoh ArrayBuffer, jika ia digunakan tanpa perkaitan, ralat akan dilaporkan.

Penyelesaian:

  • Sahkan sama ada objek TypedArray yang digunakan dikaitkan dengan tika ArrayBuffer.
  • Jika ia tidak dikaitkan, anda boleh mencipta tika ArrayBuffer dan mengaitkannya dengan TypedArray sebelum menggunakannya.

Kod sampel:

const length = 10;
let uint8 = new Uint8Array(length).buffer; // 此时 uint8 不是 TypedArray 对象
let uint8Typed = new Uint8Array(uint8); // 报错:TypeError: Cannot read property 'byteLength' of undefined

const buffer = new ArrayBuffer(length);
uint8Typed = new Uint8Array(buffer); // 关联 ArrayBuffer 实例后再使用

Ringkasan:

Melalui kes di atas, kami telah mengetahui tentang ralat dan penyelesaian Penampan biasa dalam Node.js. Dalam proses pembangunan sebenar, kita perlu menganalisis dan menyelesaikan mengikut situasi tertentu, mengikut prinsip keselamatan diutamakan dan kepraktisan terlebih dahulu. Pada masa yang sama, kami juga perlu memberi perhatian kepada nombor versi Node.js dan mengikut spesifikasi penggunaan API standard untuk mengelakkan ralat yang tidak perlu yang disebabkan oleh perubahan API.

Atas ialah kandungan terperinci Ralat penimbal dalam nodejs. 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