javascript - 检查 req.checkBody() 内的 req.body.property.childProperty

标签 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 未定义,并且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/

相关文章:

javascript - 如何在原型(prototype)中按类选择元素?

mysql - 本地主机上的 Node.js 应用程序崩溃

javascript - 获取使用socket.io传输的图像文件大小

javascript - 语法错误: Unexpected token o in JSON at position 1 over ajax request

node.js - Passport JWT 身份验证提取 token

javascript - jquery 一次切换一个 div

javascript - react native : renderRow not executed

javascript - 谷歌浏览器推送通知

javascript - then() 在 Promise 之前完成

node.js - 将 Angular 和 Node Express CSRF 与 Redis session 一起使用,如何在 session 过期后重置 session 信息和 CSRF?