检查物体和财产的存在
我经常使用mongodb,在从查询结果中访问特定属性之前,我写了一个经常看起来像这样的存在检查:
if(result && result.subObject1 && result.subObject1.property) { ... }
这是最安全的方法来检查结果stream,或我接收的任何其他对象,我知道。
这样做很好,正如我自己所想的那样,“有可能有更好的方法来做到这一点”。
我看了几个相关的post,但没有一个真正解决这个问题,特别是在处理(可能)深度嵌套的对象时。
避免数据值本身的真值/错误检查。
例如
请求体: data : { temperature : -128, level : 42 }
等
服务器validation: data must be sent and have temperature value set
validation码: if(data && data.temperature){//ok}else{//invalid input}
上面的validation码将拒绝0和负温度值,而服务器的实际validation动机是确保温度值始终设置。
因此,检查应清楚地分开定义:
function exists(val){ return val !== undefined && val !== null; }
function isNumber(val){ return !isNan(val); }
并应使用这些检查的组合。
为了更强大的检查,使用像validation器这样的模块。
就深度检查而言,您需要首先定义一个完整的JSON模式 ,然后在其上运行一个模式validation器 。