【问题标题】:Custom express-validator自定义快速验证器
【发布时间】:2018-07-20 18:34:03
【问题描述】:

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

【问题讨论】:

  • 尝试将结果返回为Promise,而不是常规的return

标签: mysql node.js express express-validator


【解决方案1】:

这是因为您返回的变量 exist 等于 db.query()(并且始终是 truthy 值)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多