0

我的自定义验证器始终返回 true,尽管当结果未定义并且在这种情况下我返回 false

const validatorOptions = {
customValidators: {
    not_exist: (inputParam) => {
        let qry = 'select * from  Users where email = ?';
        let exist= db.query(qry, inputParam, (err, result) => {
            if (err)
                throw err;
            if (result) {
                console.log("Exist");
                return false;
            } else
                return true;
        });
        return exist;

    }
}

};

我尝试使用Promise,但仍然无法正常工作。

const validatorOptions = {
customValidators: {
    isUniqueEmail: (email) => {
        function getRecord(email) {
            return new Promise(function(resolve, reject) {
                let qry = 'select * from  Users where email = ?';
                db.query(qry, email, (err, result) => {
                    if (err)
                        reject(err);
                    else {
                        resolve(result);
                    }

                });
            });
        };
        getRecord(email).then(function(res) {
            return (res.length == 0);
        }).catch((err) => { throw err; });;

    }
}

};

req.checkBody('email', 'Email already exist').isUniqueEmail();
4

1 回答 1

0

那是因为您返回的变量存在等于db.query()(并且始终是一个truthy值)。

我对这段代码有一些疑问(因为我看不出它如何在当前状态下运行):

  • customValidators小时候好像很奇怪,validatorOptions有这个原因吗?
  • 你混合骆驼和蛇的情况有什么原因吗?
  • 您认为自定义验证器方法名称是否更能说明其目的,例如isUniqueEmailAddress
  • 为什么 SQL 语句不将参数连接到
  • 您认为出于安全原因,这段代码是否应该实现一些 SQL 输入清理?
  • db.query() 真的需要 3 个参数吗???(我认为它只需要 SQL 和回调)
  • 由于 db.query() 正在执行异步操作,您是否考虑过使用 Promises?
于 2018-07-20T21:32:05.733 回答