检查物体和财产的存在

我经常使用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器 。