使用 node.js、pg-promise 的简单检查功能

Simple Check Function with node.js, pg-promise

我正在尝试在 之后编写一个简单的 check() 函数。该函数成功打印出 "True!",但是当我执行 console.log(submitModels.verifyOrganizationString(formInputs.organizationString)); 时,该函数的 return 值为 undefined。我怎样才能得到 return truefalse 的功能?

现在函数只有 returns "Invalid organization string" 即使字符串有效。

我认为这个结果与 pg-promise 库有关,但不确定。

在文件 submit.js 中,我有:

function verifyOrganizationString(organizationString) {
  db.one("select * from organizations where organization_string=", [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");
  }

}

你得到未定义的原因是因为 'verifyOrganizationString' 实际上 return 什么都没有。您需要 return 您的 db.one 链创建的承诺。

尽管在那种情况下该方法仍然不会 return true 或 false 但布尔值包含在另一个 promise 中,这样您就可以像处理 db.one。

您的问题是由于无效使用承诺和错误使用 pg-promise

如果你想让函数return true/false 取决于是否找到一条记录,把函数改成这样:

function verifyOrganizationString(organizationString) {
    return db.oneOrNone("select * from organizations where organization_string = ",
                         organizationString, a => !!a);
}

然后你就可以像普通的 promise 一样使用它了:

verifyOrganizationString('bla-bla')
    .then(data => {
       // data = true/false
    })
    .catch(error => {
        // error
    });

另请参阅:SELECT ⇒ INSERT 个示例。