Maison  >  Article  >  interface Web  >  nodejs publie du code tronqué

nodejs publie du code tronqué

王林
王林original
2023-05-24 09:07:36509parcourir

Lorsque vous utilisez Node.js pour effectuer des requêtes HTTP POST, des caractères tronqués apparaissent parfois après le passage des paramètres chinois. Cet article partagera quelques solutions courantes.

Analyse des causes

Lorsque nous soumettons des paramètres chinois via une requête HTTP POST dans Node.js, si l'encodage n'est pas effectué, les paramètres chinois seront envoyés au serveur en encodage UTF-8. Cependant, dans certains cas, le serveur ne peut pas analyser correctement les paramètres chinois codés en UTF-8, ce qui entraîne des caractères tronqués. Cette situation a généralement les raisons suivantes :

  1. Le format d'encodage n'est pas correctement défini côté serveur. Si le serveur ne définit pas correctement le format de codage sur UTF-8, il ne pourra pas analyser correctement les paramètres chinois codés en UTF-8 envoyés par le client, ce qui entraînera des caractères tronqués.
  2. Le client n'a pas défini correctement l'en-tête de la requête. Lorsque nous effectuons une requête HTTP POST via Node.js, nous devons définir le champ Content-Type dans l'en-tête de la requête sur application/x-www-form-urlencoded;charset=utf-8 pour indiquer au serveur que les paramètres de la requête ont été reçus. sont encodés en UTF-8.
  3. Le module Node.js ne gère pas correctement l'encodage. Dans Node.js, certains modules ne définissent pas le format d'encodage sur UTF-8 par défaut et doivent être spécifiés manuellement. Si le codage n'est pas effectué lors de l'utilisation de ces modules, des caractères tronqués apparaîtront.

Solution

Méthode 1 : définissez le format d'encodage côté serveur sur UTF-8

Nous pouvons définir le format d'encodage côté serveur sur UTF-8 pour analyser correctement les paramètres chinois codés en UTF-8 envoyés par le client. Dans le framework Express, nous pouvons définir le format d'encodage sur UTF-8 via le code suivant :

const express = require('express')
const app = express()

app.use(express.urlencoded({ extended: false }))
app.use(express.json())
app.use(function(req, res, next) {
  res.header('Content-Type', 'text/html; charset=utf-8')
  next()
})

Méthode 2 : définir l'en-tête de la requête sur UTF-8

Nous pouvons définir le champ Content-Type dans l'en-tête de la requête sur dans Node.js application/x-www-form-urlencoded;charset=utf-8 pour indiquer au serveur que les paramètres de requête reçus sont codés en UTF-8. Lorsque nous utilisons la bibliothèque axios pour effectuer une requête HTTP POST, nous pouvons définir l'en-tête de la requête comme ceci :

const axios = require('axios')

axios.post('/api/posts', {
  title: '中文标题',
  content: '中文内容'
}, {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  }
}).then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

Méthode 3 : Encodage manuel

Pour certains modules Node.js qui ne définissent pas l'encodage par défaut sur UTF-8, nous peut encoder manuellement le processus et convertir les paramètres chinois en encodage UTF-8. Lorsque nous utilisons le module de chaîne de requête pour le traitement de l'encodage, nous pouvons l'utiliser comme ceci :

const querystring = require('querystring')
const https = require('https')

const postData = querystring.stringify({
  title: '中文标题',
  content: '中文内容'
})

const options = {
  hostname: 'www.example.com',
  path: '/api/posts',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
}

const req = https.request(options, res => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.write(postData)
req.end()

Résumé

Lors d'une requête HTTP POST Node.js, il est courant que les paramètres chinois soient tronqués. Nous devons définir correctement le format de codage côté serveur, les en-têtes de requête et effectuer manuellement le traitement de codage pour garantir que les paramètres chinois peuvent être transmis correctement. Dans le même temps, lors de l'utilisation de certains modules Node.js, nous devons également faire attention à savoir si le format d'encodage a été défini par défaut sur UTF-8.

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