我正在尝试在this example之后编写一个简单的check()
函数。该功能成功打印出" True!"但当我undefined
时,函数的返回值为console.log(submitModels.verifyOrganizationString(formInputs.organizationString));
。如何让函数返回true
和false
?
现在,即使字符串有效,该函数也只返回"Invalid organization string"
。
我认为这个结果与pg-promise
库有关,但我不确定。
在文件submit.js
中,我有:
function verifyOrganizationString(organizationString) {
db.one("select * from organizations where organization_string=$1", [organizationString])
.then(data => {
console.log("True!");
return true;
})
.catch(error => {
console.log("False!");
return false;
});
}
module.exports = {
verifyOrganizationString,
};
在另一个档案中,我有
const submitModels = require('../models/submit.js');
function proccessSubmission(req, res) {
var formInputs = req.body;
console.log(submitModels.verifyOrganizationString(formInputs.organizationString));
if (submitModels.verifyOrganizationString(formInputs.organizationString)) {
submitModels.insertIntoDatabase(formInputs);
res.redirect('/');
} else {
res.send("Invalid organization string");
}
}
答案 0 :(得分:2)
您未定义的原因是' verifyOrganizationString'实际上并没有返回任何东西。您需要返回db.one链创建的promise。
虽然在这种情况下该方法仍然不会返回true或false,但布尔包含在另一个promise中,因此您可以使用与db.one结果相同的方式链接验证函数的结果。
答案 1 :(得分:2)
您的问题是由于无效使用承诺和使用pg-promise。
如果您希望函数返回true
/ false
,具体取决于是否找到记录,请将函数更改为:
function verifyOrganizationString(organizationString) {
return db.oneOrNone("select * from organizations where organization_string = $1",
organizationString, a => !!a);
}
然后你可以像普通的承诺一样使用它:
verifyOrganizationString('bla-bla')
.then(data => {
// data = true/false
})
.catch(error => {
// error
});
另请参阅:SELECT ⇒ INSERT示例。