我的自定义验证器总是返回 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();
最佳答案
这是因为您返回的变量exist等于db.query()
(并且始终是truthy
值) .
我对此代码有一些疑问(因为我不知道它如何在当前状态下运行):
- 将
customValidators
作为validatorOptions
的子项似乎很奇怪,这有什么原因吗? - 您混合使用 Camel 箱和蛇箱有什么原因吗?
- 您认为自定义验证器方法名称是否可以更准确地描述其用途,例如
isUniqueEmailAddress
? - 为什么 SQL 语句不将参数连接到
- 出于安全原因,您认为这段代码应该实现一些 SQL 输入清理吗?
- db.query() 真的需要 3 个参数吗??? (我认为它只需要 SQL 和回调)
- 由于 db.query() 正在执行异步操作,您是否考虑过使用 Promises?
关于mysql - 自定义快速验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51448525/