Maison >interface Web >Questions et réponses frontales >nodejs demande du code tronqué

nodejs demande du code tronqué

PHPz
PHPzoriginal
2023-05-24 09:20:37623parcourir

Lorsque Node.js traite les requêtes HTTP, si la requête contient des caractères chinois ou d'autres caractères non-ASCII, des caractères tronqués peuvent apparaître. Dans cet article, je vais aborder quelques causes courantes de ce problème et comment les résoudre.

Problème 1 : Incompatibilité d'encodage

Les données des requêtes HTTP sont généralement transmises en codage utf8. Cependant, si le client utilise d'autres méthodes de codage (telles que gbk), des caractères tronqués apparaîtront côté serveur. La façon de résoudre ce problème consiste à définir la méthode de codage sur la méthode correcte (c'est-à-dire utf8) lors du traitement de la requête.

Dans Node.js, vous pouvez spécifier la méthode d'encodage de la requête en définissant l'attribut content-type de l'en-tête :

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

De même, lors du traitement de la requête, vous devez également définir la méthode d'encodage sur utf8 :

request.setEncoding('utf8');

Question 2 : Données non décodées

Parfois, il y a un problème avec les données non décodées lors du traitement des demandes. Par exemple, lorsque la requête contient des données codées en URL, le serveur peut recevoir des données non décodées, ce qui entraîne des caractères tronqués.

La façon de résoudre ce problème consiste à décoder les données codées en URL lors du traitement de la demande. Dans Node.js, vous pouvez utiliser le module de chaîne de requête intégré pour décoder les données codées en URL :

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

Problème 3 : les requêtes POST ne sont pas traitées correctement

Lors du traitement des requêtes POST, si le corps de la requête n'est pas traité correctement. entraînera également des problèmes tronqués. Ce problème sera plus évident lorsque le corps de la requête contient des caractères chinois ou d'autres caractères non-ASCII.

La façon de résoudre ce problème est de gérer correctement les données dans le corps de la requête lors du traitement des requêtes POST. Dans Node.js, vous pouvez utiliser le middleware d'analyseur de corps intégré pour traiter les données du corps des requêtes POST :

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

Problème 4 : Les fichiers téléchargés ne sont pas traités correctement

Lors du traitement des fichiers téléchargés, si l'encodage du Le fichier n'est pas traité correctement, la méthode entraînera également des problèmes de code tronqué. Par exemple, lorsque le codage du fichier téléchargé n'est pas utf8, le serveur recevra des données mal décodées.

La façon de résoudre ce problème est de définir le codage du fichier de la manière correcte (c'est-à-dire utf8) lors du traitement du fichier téléchargé. Dans Node.js, vous pouvez utiliser le middleware multer pour traiter correctement les fichiers téléchargés :

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 是上传的文件
});

Résumé :

Voici plusieurs raisons courantes pour lesquelles les caractères sont tronqués lorsque Node.js gère les requêtes HTTP. Chaque problème correspond à des solutions. Dans le développement réel, lorsque vous rencontrez ce type de problème, vous pouvez choisir une méthode appropriée pour le résoudre en fonction de la situation spécifique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn