Request: JSON.parse gagal karena karakter BOM

Dibuat pada 5 Jan 2018  ·  3Komentar  ·  Sumber: request/request

Ringkasan

BOM tidak dilucuti dari badan respons saat badan diisi dengan buffer

Contoh Paling Sederhana untuk Direproduksi

    request({
        url: url,
        json: true,
        strictSSL: false,
    }, (error, response, data) => {
        if (error) {
            throw error;
        }

        if (response.statusCode === 200) {
            // data is string instead of json deserialized object 
        }
    })

Perilaku yang Diharapkan

BOM char dilucuti dan respons json di-deserialized

Perilaku Saat Ini

JSON.parse gagal dan string dikembalikan

Kemungkinan Solusi

    if (bufferLength) {
      debug('has body', self.uri.href, bufferLength)
      response.body = Buffer.concat(buffers, bufferLength)
      if (self.encoding !== null) {
        response.body = response.body.toString(self.encoding)
      }
      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.
      // This can lead to leaky behavior if the user retains a reference to the request object.
      buffers = []
      bufferLength = 0
    } else if (strings.length) {
      // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
      // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
      if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') {
        strings[0] = strings[0].substring(1)
      }
      response.body = strings.join('')
    }

Seperti yang kita lihat, karakter BOM dilucuti ketika string digunakan sebagai pengganti buffer
Ekstrak kode di luar else if (strings.length) untuk selalu membersihkan badan respons.

Konteks

Membaca respons json dari kesombongan kustom perusahaan berdasarkan swashbuckle

Lingkungan Anda

| perangkat lunak | Versi: kapan
| ---------------- | -------
| permintaan | 2.83.0
| simpul | 9.3.0
| npm | 5.5.1
| Sistem Operasi | Windows 10

stale

Komentar yang paling membantu

Jika kita menyetel penyandian: 'utf8' dalam opsi permintaan, responsnya diuraikan

Semua 3 komentar

Jika kita menyetel penyandian: 'utf8' dalam opsi permintaan, responsnya diuraikan

Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi Anda.

Saya juga melihat masalah ini - terima kasih telah memposting solusinya - akan lebih baik jika perpustakaan menangani ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat