自定义快递验证器

时间:2018-07-20 18:34:03

标签: mysql node.js express express-validator

我的自定义验证器始终返回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();

1 个答案:

答案 0 :(得分:0)

那是因为您要返回变量 exist ,该变量等于db.query()(并且始终为truthy值)。

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

  • customValidators作为validatorOptions的孩子似乎很奇怪,这是有原因的吗?
  • 您有理由混合骆驼和蛇皮吗?
  • 您认为自定义验证器方法名称可能更能说明其用途,例如isUniqueEmailAddress
  • 为什么SQL语句没有将参数连接到
  • 出于安全原因,您认为此代码应实现一些SQL输入清理吗?
  • db.query()是否真的需要3个参数??? (我认为它只需要SQL和回调)
  • 由于db.query()正在执行异步操作,您是否考虑过使用Promises?