问题一:

最近在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()

node.js express环境下中文需要注意的地方的更多相关文章

  1. mac下配置Node.js开发环境、express安装、创建项目

    mac下配置Node.js开发环境.express安装.创建项目 一.node.js的安装 去官网下载对应的平台版本就可以了,https://nodejs.org 二.express安装 sudo n ...

  2. Windows下Node.js+Express+WebSocket 安装配置

    Linux参考: Linux安装Node.js 使用Express搭建Web服务器 Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V ...

  3. windows下安装node.js及环境配置、部署项目

    windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...

  4. Windows下Node.js开发环境搭建

    1.http://nodejs.org/下载node.js运行环境安装 2.打开DOS命令行 .安装express框架 1 >npm install express 末尾显示如下为安装成功 .安 ...

  5. Node.js event loop 和 JS 浏览器环境下的事件循环的区别

    Node.js  event loop 和 JS 浏览器环境下的事件循环的区别: 1.线程与进程: JS 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程? 进程是 CPU ...

  6. Nodejs学习笔记(一)--- 简介及安装Node.js开发环境

    目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...

  7. 微信公众号开发总结(Node.js + express + winston)

    关于订阅号.服务号.企业号 官方定位 订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证后每天可以群发一条消息,可达到宣传效果,构建与读者之间更好的沟通和管理模式. 服务号:主要偏于服务交互(类似银 ...

  8. Nodejs学习笔记(一)—简介及安装Node.js开发环境

    一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...

  9. modeJS 深了解(1): Node.js + Express 构建网站预备知识

    转载:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp1.html 目录 前言 新建express项目并自定义路由规则 如何提取页面中的 ...

随机推荐

  1. JS绑定事件和移除事件的处理方法

    addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作.所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名.作为事件 ...

  2. 排序算法对比,步骤,改进,java代码实现

    前言 发现是时候总结一番算法,基本类型的增删改查的性能对比,集合的串并性能的特性,死记太傻了,所以还是写在代码里,NO BB,SHOW ME THE CODE! github地址:https://gi ...

  3. VS2008 Pocket PC 2003 SE VGA仿真程序网络设置

    最近对这个问题摸索的很久,都没有解决,今天终于搞定,现将大体设置步骤记录下来,以备回顾和方便别人查看,步骤如下: 1.打开VS2008,打开Windows Mobile设备中心(网上有下载). 2.连 ...

  4. webpack.config.js====配置babel

    参考:https://www.jianshu.com/p/9808f550c6a91. 安装依赖babel-loader: 负责 es6 语法转化babel-preset-env: 包含 es6.7 ...

  5. OAuth相关知识

    什么是OAuth认证 1.一种安全认证的协议;2.协议为用户资源的授权提供了一个安全的.开放又简易的标准;3.OAuth的授权不会使第三方触及到用户的账户信息(例如用户名和密码) 网址:www.oau ...

  6. Storm里面fieldsGrouping和Field的概念详解

    这个Field通常和fieldsGrouping分组机制一起使用,这个Field特别难理解,我自己也是在网上看了好多文章,感觉依旧讲的不是很清楚,是似而非,没有抓到重点.这个问题足足困扰了我3-4天时 ...

  7. Router模块

    一.应用场景 监听浏览器地址栏URL的hash值(#后面的部分)的变化,用正则匹配出参数执行相应的JS方法.URL地址的hash部分充当业务逻辑的分发单位. 示例: <!DOCTYPE html ...

  8. Ajax 使用 FormData做为data的参数时 出现Illegal invocation

    今天在用ajax向后台传递数据时出现此错误,在ajax的参数中加上 contentType: false, processData: false, 这两句即可.

  9. C#基础知识图谱

  10. 真正理解 git fetch, git pull 以及 FETCH_HEAD(转)

    转自http://www.cnblogs.com/ToDoToTry/p/4095626.html 真正理解 git fetch, git pull 要讲清楚git fetch,git pull,必须 ...