Rumah  >  Artikel  >  hujung hadapan web  >  nodejs req kod bercelaru

nodejs req kod bercelaru

PHPz
PHPzasal
2023-05-24 09:20:37544semak imbas

Apabila Node.js memproses permintaan HTTP, jika permintaan itu mengandungi aksara Cina atau aksara bukan ASCII yang lain, aksara bercelaru mungkin berlaku. Dalam artikel ini, saya akan membincangkan beberapa punca biasa masalah ini dan cara membetulkannya.

Masalah 1: Pengekodan tidak sepadan

Data dalam permintaan HTTP biasanya dihantar dalam pengekodan utf8. Walau bagaimanapun, jika pelanggan menggunakan kaedah pengekodan lain (seperti gbk), aksara bercelaru akan berlaku pada bahagian pelayan. Cara untuk menyelesaikan masalah ini ialah dengan menetapkan kaedah pengekodan kepada kaedah yang betul (iaitu utf8) semasa memproses permintaan.

Dalam Node.js, anda boleh menentukan kaedah pengekodan permintaan dengan menetapkan atribut jenis kandungan pengepala:

res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

Begitu juga, semasa memproses permintaan, anda juga perlu menetapkan kaedah pengekodan kepada utf8:

request.setEncoding('utf8');

Masalah 2: Data tidak dinyahkod

Apabila memproses permintaan, kadangkala akan berlaku masalah data tidak dinyahkod. Sebagai contoh, apabila permintaan mengandungi data yang dikodkan URL, pelayan mungkin menerima data yang tidak dinyahkod, mengakibatkan aksara yang bercelaru.

Cara untuk menyelesaikan masalah ini ialah dengan menyahkod data yang dikodkan URL semasa memproses permintaan. Dalam Node.js, anda boleh menggunakan modul rentetan pertanyaan terbina dalam untuk menyahkod data berkod url:

const querystring = require('querystring');
request.on('data', (data) => {
  const decodedData = querystring.decode(data.toString());
  // do something with decoded data
});

Masalah 3: Permintaan POST tidak diproses dengan betul

Semasa memproses permintaan POST, jika Permintaan POST tidak diproses dengan betul Memproses data dalam kandungan permintaan juga boleh menyebabkan aksara bercelaru. Masalah ini akan menjadi lebih jelas apabila badan permintaan mengandungi aksara Cina atau aksara bukan ASCII yang lain.

Cara untuk menyelesaikan masalah ini adalah dengan mengendalikan data dalam badan permintaan dengan betul semasa memproses permintaan POST. Dalam Node.js, anda boleh menggunakan middleware body-parser terbina dalam untuk memproses data badan permintaan permintaan POST:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/', (req, res) => {
  // req.body 包含 POST 请求的请求体的数据
});

Masalah 4: Fail yang dimuat naik tidak diproses dengan betul

Semasa memproses fail yang dimuat naik, jika kaedah pengekodan fail tidak diproses dengan betul, ia juga akan menyebabkan masalah kod bercelaru. Sebagai contoh, apabila pengekodan fail yang dimuat naik bukan utf8, pelayan akan menerima data yang dinyahkod secara salah.

Cara untuk menyelesaikan masalah ini ialah dengan menetapkan pengekodan fail kepada cara yang betul (iaitu utf8) semasa memproses fail yang dimuat naik. Dalam Node.js, anda boleh menggunakan multer middleware untuk mengendalikan fail yang dimuat naik dengan betul:

const multer = require('multer');
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname)
  }
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('file'), (req, res) => {
  // req.file 是上传的文件
});

Ringkasan:

Di atas adalah beberapa masalah biasa yang menyebabkan aksara bercelaru apabila Node.js mengendalikan permintaan HTTP sebab dan penyelesaian yang sepadan bagi setiap masalah juga diberikan. Dalam perkembangan sebenar, apabila menghadapi masalah seperti ini, anda boleh memilih kaedah yang sesuai untuk menyelesaikannya mengikut situasi tertentu.

Atas ialah kandungan terperinci nodejs req kod bercelaru. 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