问题一:

最近在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. Windows下搭建QT环境

    必须软件 qt-windows-opensource-5.1.1-msvc2010-x86-offline qt-vs-addin-1.2.2-opensource支持vs2008.2010.2012 ...

  2. Ubuntu系统下同时打开多个终端窗口的软件

    sudo apt-get install Terminator

  3. Gym 101047M Removing coins in Kem Kadrãn

    给定一个序列,只能拿走D,隔壁的会翻转,问能否全部拿走. 注意到如果能拿走的话,拿D的顺序是没关系的.模拟即可 #include <cstdio> #include <cstdlib ...

  4. string去空格方法

    String str = " asd "; String ntr = ("A" + str).trim().substring(1);//将头部加一个字符再用t ...

  5. &&运算符和||运算符的优先级问题 专题

    public class SyntaxTest { @Test public void test() { System.out.println(true || true && fals ...

  6. git 如何生成 SSH 公钥

    1.打开你的git bash 窗口 2.进入.ssh目录:cd ~/.ssh 3.找到id_rsa.pub文件:ls 4.查看公钥:cat id_rsa.pub    或者vim id_rsa.pub ...

  7. 如何在VS中快速导入新的源码以及文件夹

    参考链接:http://www.cjjjs.com/paper/xmkf/201641716212844.aspx 在visual studio 2013中尝试发现的问题:原文中“显示所有文件 ”的操 ...

  8. angularjs嵌套路由

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  9. javaweb 工程 tomcat启动报错的问你

    2015-03-03 14:39:32,657 INFO (org.springframework.web.context.ContextLoader:296) - Root WebApplicati ...

  10. Java栈,PC寄存器,本地方法栈,堆,方法区(静态区)和运行常量池

    详情参考:https://my.oschina.net/wangsifangyuan/blog/711329 前言:当要判断一个变量存在什么空间上哪儿时,先分析它是哪一种(是实例变量还是局部变量),实 ...