node.js express環境下中文須要注意的地方

問題一:express

最近在nuxt項目中開始着手把一些跨域的請求轉移到express裏,其實跟其餘語言差很少,http對象發請求,接收請求都寫得很順暢。以前用的請求部分大多數是get請求,因此除了注意編碼問題以外,就基本上接口什麼寫得很快,可是POST請求裏因爲要計算Content-Length,這裏就出現一個因爲中文計算長度有問題致使的請求失敗。json

  var bodyString = JSON.stringify(obj)
var options = { method: 'POST', host: 'mt.emoney.cn', port: 80, path: `*********`, headers: { 'Content-Type': 'application/json;charset=utf-8', 'Content-Length': bodyString.length } }

上面這樣發起請求時,若是obj對象裏面有屬性裏面包含了中文,bodyString.length就計算有問題,如下標紅的是一種方案。跨域

  var bodyString = JSON.stringify(obj)
bodyString = new Buffer(bodyString) var options = { method: 'POST', host: 'mt.emoney.cn', port: 80, path: `/platform/stock/MarkStock`, headers: { 'Content-Type': 'application/json;charset=utf-8', 'Content-Length': bodyString.length } }

這裏還有另外一種獲取長度的方案。app

Buffer.byteLength(data, 'utf8');

 問題二:編碼

基本上我在網上找了一段獲取請求內容並輸出的代碼是這樣的,options部分先省略
spa

  var cusRequest = http.request(options, back => {
    if (back.statusCode === 200) {
      var body = ''
      back.on('data', data => {
        body += data
      }).on('end', () => {
        res.status(200).send(body)
      })
    } else {
      res.status(500).send('error')
    }
  })
  cusRequest.end()

用body進行字符串的拼接,這裏的data我輸出來看了一下,是個Buffer數據,由於是一段一段的,它默認先轉換爲字符串拼接到body後面,可是中文可能有點不太同樣,一旦中間的某個中文字符串恰好被先後兩個data截斷,那麼就會出現一大段中文中某幾個字變成亂碼,因此這裏不能用字符串進行拼接,得直接用Buffer拼接好後在進行轉換爲中文。以下面代碼所示:nuxt

 var cusRequest = http.request(options, back => {
    if (back.statusCode === 200) {
      var bufs = [] back.on('data', data => { bufs.push(data) }).on('end', () => { var buf = Buffer.concat(bufs)
        res.status(200).send(buf.toString())
      })
    } else {
      res.status(500).send('error')
    }
  })
  cusRequest.end()
相關文章
相關標籤/搜索