使用node.js,pg-promise进行简单检查功能

时间:2017-03-18 04:24:56

标签: javascript node.js pg-promise

我正在尝试在this example之后编写一个简单的check()函数。该功能成功打印出" True!"但当我undefined时,函数的返回值为console.log(submitModels.verifyOrganizationString(formInputs.organizationString));。如何让函数返回truefalse

现在,即使字符串有效,该函数也只返回"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");
  }

}

2 个答案:

答案 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示例。