nodejs 포스트의 잘못된 코드

王林
풀어 주다: 2023-05-24 09:07:36
원래의
584명이 탐색했습니다.

Node.js를 사용하여 HTTP POST 요청을 할 때 중국어 매개변수를 전달한 후 잘못된 문자가 나타나는 경우가 있습니다. 이 문서에서는 몇 가지 일반적인 솔루션을 공유합니다.

원인 분석

Node.js에서 HTTP POST 요청을 통해 중국어 매개변수를 제출할 때 인코딩이 수행되지 않으면 중국어 매개변수가 UTF-8 인코딩으로 서버에 전송됩니다. 그러나 어떤 경우에는 서버가 UTF-8로 인코딩된 중국어 매개변수를 올바르게 구문 분석할 수 없어 문자가 깨질 수 있습니다. 이러한 상황에는 일반적으로 다음과 같은 이유가 있습니다.

  1. 인코딩 형식이 서버 측에서 올바르게 설정되지 않았습니다. 서버가 인코딩 형식을 UTF-8로 올바르게 설정하지 않으면 클라이언트에서 보낸 UTF-8로 인코딩된 중국어 매개변수를 올바르게 구문 분석할 수 없어 문자가 깨집니다.
  2. 클라이언트가 요청 헤더를 올바르게 설정하지 않았습니다. Node.js를 통해 HTTP POST 요청을 할 때 요청 헤더의 Content-Type 필드를 application/x-www-form-urlencoded;charset=utf-8로 설정하여 요청 매개변수가 수신되었음을 서버에 알려야 합니다. UTF-8 인코딩입니다.
  3. Node.js 모듈이 인코딩을 올바르게 처리하지 않습니다. Node.js에서 일부 모듈은 기본적으로 인코딩 형식을 UTF-8로 설정하지 않으므로 수동으로 지정해야 합니다. 인코딩 없이 이러한 모듈을 사용하면 문자가 깨질 수 있습니다.

해결책

방법 1: 서버 측 인코딩 형식을 UTF-8로 설정

클라이언트에서 전송된 UTF-8 인코딩 중국어 매개변수를 올바르게 구문 분석하기 위해 서버 측 인코딩 형식을 UTF-8로 설정할 수 있습니다. Express 프레임워크에서는 다음 코드를 통해 인코딩 형식을 UTF-8로 설정할 수 있습니다.

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()
})
로그인 후 복사

방법 2: 요청 헤더를 UTF-8로 설정

요청 헤더의 Content-Type 필드를 다음과 같이 설정할 수 있습니다. Node.js application/x-www-form-urlencoded;charset=utf-8에서 수신된 요청 매개변수가 UTF-8로 인코딩되었음을 서버에 알립니다. HTTP POST 요청을 만들기 위해 axios 라이브러리를 사용할 때 요청 헤더를 다음과 같이 설정할 수 있습니다:

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)
})
로그인 후 복사

방법 3: 수동 인코딩

기본 인코딩을 UTF-8로 설정하지 않는 일부 Node.js 모듈의 경우, 프로세스를 수동으로 인코딩하고 중국어 매개변수를 UTF-8 인코딩으로 변환할 수 있습니다. 인코딩 처리를 위해 쿼리스트링 모듈을 사용할 때 다음과 같이 사용할 수 있습니다:

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()
로그인 후 복사

Summary

Node.js HTTP POST 요청을 할 때 중국어 매개변수가 왜곡되는 것이 일반적입니다. 중국어 매개변수가 올바르게 전달될 수 있도록 서버 측 인코딩 형식, 요청 헤더 및 수동 인코딩 처리를 올바르게 설정해야 합니다. 동시에 일부 Node.js 모듈을 사용할 때 인코딩 형식이 기본적으로 UTF-8로 설정되어 있는지도 주의할 필요가 있습니다.

위 내용은 nodejs 포스트의 잘못된 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿