zoukankan      html  css  js  c++  java
  • node.js express环境下中文需要注意的地方

    问题一:

    最近在nuxt项目中开始着手把一些跨域的请求转移到express里,其实跟其他语言差不多,http对象发请求,接收请求都写得很顺畅。之前用的请求部分大多数是get请求,所以除了注意编码问题之外,就基本上接口什么写得很快,但是POST请求里由于要计算Content-Length,这里就出现一个由于中文计算长度有问题导致的请求失败。

      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 } }

    这里还有另一种获取长度的方案。

    Buffer.byteLength(data, 'utf8');

     问题二:

    基本上我在网上找了一段获取请求内容并输出的代码是这样的,options部分先省略

      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拼接好后在进行转换为中文。如下面代码所示:

     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()
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/stealth7/p/7891865.html
Copyright © 2011-2022 走看看