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()
node.js express环境下中文需要注意的地方的更多相关文章
- mac下配置Node.js开发环境、express安装、创建项目
mac下配置Node.js开发环境.express安装.创建项目 一.node.js的安装 去官网下载对应的平台版本就可以了,https://nodejs.org 二.express安装 sudo n ...
- Windows下Node.js+Express+WebSocket 安装配置
Linux参考: Linux安装Node.js 使用Express搭建Web服务器 Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V ...
- windows下安装node.js及环境配置、部署项目
windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...
- Windows下Node.js开发环境搭建
1.http://nodejs.org/下载node.js运行环境安装 2.打开DOS命令行 .安装express框架 1 >npm install express 末尾显示如下为安装成功 .安 ...
- Node.js event loop 和 JS 浏览器环境下的事件循环的区别
Node.js event loop 和 JS 浏览器环境下的事件循环的区别: 1.线程与进程: JS 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程? 进程是 CPU ...
- Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...
- 微信公众号开发总结(Node.js + express + winston)
关于订阅号.服务号.企业号 官方定位 订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证后每天可以群发一条消息,可达到宣传效果,构建与读者之间更好的沟通和管理模式. 服务号:主要偏于服务交互(类似银 ...
- Nodejs学习笔记(一)—简介及安装Node.js开发环境
一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...
- modeJS 深了解(1): Node.js + Express 构建网站预备知识
转载:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp1.html 目录 前言 新建express项目并自定义路由规则 如何提取页面中的 ...
随机推荐
- Java文件与io——RandomAccessFile
RandomAccessFile是IO包的类,从Object直接继承而来.只可以对文件进行操作,可以对文件进行读取和写入.RandomAccessFile有强大的文件读写功能,其内部是大型byte[] ...
- (转)linux 系统下虚拟用户的作用
原文:http://blog.csdn.net/luoshao20120430/article/details/16900653 http://blog.csdn.net/u01 ...
- 安全性测试入门 (五):Insecure CAPTCHA 验证码绕过
本篇继续对于安全性测试话题,结合DVWA进行研习. Insecure Captcha不安全验证码 1. 验证码到底是怎么一回事 这个Captcha狭义而言就是谷歌提供的一种用户验证服务,全称为:Com ...
- Spring Junit测试(非web,即不包含Controller测试)
使用Spring-Test对Spring框架进行单元测试 配置过程: lib加入导入spring-test.jar和junit包 或者使用Maven依赖: <dependency> < ...
- 使用SpringSession管理分布式会话时遇到的反序列化问题
关于SpringSession相关的介绍和使用指南,可移步如下网址: [SpringSession管理分布式系统的会话Session] https://www.cnblogs.com/captaina ...
- 【mysql】mysql 配置
安装完mysql后, 要及得配置一下 /etc/mysql/my.cnf 配置字符编码为utf8 [client] default-character-set = utf8 [mysqld] defa ...
- Vue打包后页面出现cannot get
学习Vue有大半个月了,然而遇到了不少坑,完全没有高手们那么容易,中间有不少值得记录下的东东,回头好好理理.先理下今天的: Vue打包命令简单啊,直接在命令行输入:npm run build 然而没一 ...
- 搭建zabbix服务器监控
搭建zabbix 监控服务 服务器环境Centos 7.3 修改网卡名称 高并发优化 Web环境 nginx + php-fpm 必须对nginx配置有连接优化 使用systemd服务启动nginx和 ...
- 实战:ADFS3.0单点登录系列-集成MVC
本文将讲解如何让MVC应用程序与ADFS集成,完成认证的过程. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0单点登录系列-ADFS3 ...
- HDU 2191 悼念汶川地震(多重背包)
思路: 多重背包转成01背包,怎么转?把一种大米看成一堆单个的物品,每件物品要么装入,要么不装.复杂度比01背包要大.时间复杂度为O(vns)(这里S是所有物品的数量s之和).这个做法太粗糙了,但就是 ...