前后端完成websocket连接以后,用户端输入信息并发送,前端将信息发送给后端
传的数据如下:
{
id: new Date().getTime(),
user: this.username,
dateTime: new Date().getTime(),
msg: this.msg,
}
但是后端接收到的数据是这样子的:
服务端得到的是流数据
(由于一开始不知道原因,然后重新捋了一下逻辑,最后还是没找到)然后本人重新用vue2写了一次,神奇的是,代码是一样的,但是数据就是正确的传到后端了没有出错。
借鉴了别人的意见可能是这个原因
通过post请求,服务端接收到是流数据,必须把流数据通过“+”转化成字符串
1、比如前端提交的参数是 {
username:admin, password:123456 } 2、服务端(nodejs)得到的是流数据,如
<Buffer 75 73 65 72 6e 61 6d 65 3d 61 64 6d 69 6e 26 70 61 73 73 77 6f 72 64 3d 31 32 33 34 35 36>
3、把流数据通过“+”转化成字符串
得到才是字符串-> "username=admin&password=123456"
还有一种情况会导致使用流取数据
const fs = require('fs')
fs.readFile(file, function (err, body) {
console.log(body)
console.log(body.toString())
})
但如果文件内容较大,譬如在440M时,执行上述代码的输出为:
<Buffer 64 74 09 75 61 09 63 6f 75 6e 74 0a 0a 64 74 09 75 61 09 63 6f 75 6e 74 0a 32 30 31 35 31 32 30 38 09 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 63 6f 6d ... >
buffer.js:382
throw new Error('toString failed');
^
Error: toString failed
at Buffer.toString (buffer.js:382:11)
报错的原因是body这个Buffer对象的长度过大,导致toString方法失败。
可见,这种一次获取全部内容的做法,不适合操作大文件。
可以考虑使用流来读取文件内容。