晚上8点用户反馈线上服务有问题,立即查日志发现从晚上6点开始突然有大量的错误结构报文请求后台。错误报文为非标准的json报文,错误报文的字符串缺失双引号,例如:
{
id:244,
key:bcd2978cfa24b9123325bb780a57e2b1,
outTradeNo:a2ceb251-68e5-459d-84f2-c787f184,
storeId:020109,
uid:400059,
}
初步判断是前端post请求传递的报文序列化出问题了。
本地测试前端代码,可以复现该问题。报文的组装如下:
exchange(id: string, storeId: string, uid: string, key: string): Observable<any> {
let outTradeNo = Guid.newGuid();
const data = {
id: id,
storeId: storeId,
uid: uid,
key: key,
outTradeNo: outTradeNo
}
let body = JSON.stringify(data);
...
}
但是通过JSON.stringify序列化对象时,序列化后的内容错误,序列化的结果丢失了双引号且出现了换行符,如下图:
在这里插入描述
在这里插入描述
debugger查看JSON序列化工具,发现JSON工具多出了一个[[FunctionLocation]]的变量,且值为vconsole.min.js。vconsole为调试工具,但很奇怪地出现在了JSON工具中,于是猜想JSON序列化出问题是不是vconsole的锅。