联合调试过程中,设备调用某云端API打印报错:
TypeError: Cannot read property ‘length’ of undefined
- 登录AWS CloudWatch,找到设备的通讯过程中的打印
- 根据打印定位到指定的API,具体排查问题,模拟用户场景,找出复现规律。
单元测试指定的API过程中,发现复现规律,马上用Node.js写了一个Demo测试,找出根因。
var jsonInfo = {
"room":[
{"name":"t1", "value":"10"},
{"name":"t2", "value":"10"}
],
};
var json = JSON.stringify(jsonInfo);
console.log(json);
console.log(typeof json);
var backToJs = JSON.parse(json);
console.log(backToJs);
console.log(backToJs.room.length);
// 当上传的数据,room字段不存在的时候,去访问.room.length就会出错
TypeError: Cannot read property 'length' of undefined
at Object.<anonymous> (/node.js-tutorial/p19.js:18:38)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
- 找出复现规律并发现了产生问题的根因,这时候可以重点排查设备上传的字段。发现有的时候设备上传的字段为乱码,导致该问题出现。一方面后台并没有检查字段的合法性还有为什么设备上传的字段有的时候为乱码。这个是需要内部解决的。