检查req.checkBody()中的req.body.property.childProperty

时间:2017-03-12 20:10:32

标签: javascript node.js express

在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未定义且未定义没有函数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是一个字符串,那么一切都很糟糕并且如上所述给出错误。

1 个答案:

答案 0 :(得分:0)

答案比我想象的要简单得多:

我需要先检查一下:

>>> result
[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j'], ['k', 'l', 'm', 'n', 'o']]