在nodejs中我们通常会做这样的事情:
req.checkBody('name', 'Group name is required.').notEmpty();
同样,我也做了这样的事情:
req.checkBody('parent.name', 'Parent Name and group name should be different.').checkEquality(name);
这里检查相等性是中间件中定义的函数,如下所示:
app.use(expressValidator({
customValidators: {
checkEquality: function(firstInput, secondInput) {
return firstInput.toLowerCase() != secondInput.toLowerCase();
}
}
}));
正如您在上面的代码中看到的,checkEquality 只是一个函数,如果firstInput 等于secondInput,则返回该函数。
如果 req.body.parent 是一个对象,那么
一切顺利,所有验证根据需要成功通过或失败。
如果 req.body.parent 是字符串,则
我收到一条错误消息,指出firstInput.toLowerCase() 不是函数。
该错误有点令人困惑,但我知道该错误的含义:该错误意味着firstInput 未定义,并且undefine 没有函数toLowerCase。
另外,我知道如果 req.body.parent 是一个字符串,那么parent.name 将始终是未定义的。
所以,我尝试了:
req.checkBody(('parent.name' == undefined ? 'parent' : 'parent.name'), 'Parent Name and group name should be different.').checkEquality(name);
但还是没有运气。遇到同样的错误。
我的意思是仍然使用这段代码,如果 req.body.parent 是一个对象,我会让一切顺利进行。但如果 req.body.parent 是一个字符串,那么一切都会很糟糕,并会出现如上所述的错误。
最佳答案
答案比我想象的要简单:
我需要先像这样检查一下:
if(req.body.parent.name == undefined) { //That means parent is a string
req.checkBody('parent', 'Parent Name and group name should be different.').checkEquality(name);
} else { //That means parent is an object
req.checkBody('parent.name', 'Parent Name and group name should be different.').checkEquality(name);
}
关于javascript - 检查 req.checkBody() 内的 req.body.property.childProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42752506/