node-postgres:带有“where in/any”的查询未执行

时间:2021-03-07 10:59:33

标签: javascript node.js postgresql node-postgres

我有一个在 NodeJS 上运行的 JavaScript 应用程序。它基本上每 3 秒检查一次 API 并将一些内容写入 Postgres 数据库。我正在使用 node-postgres 与数据库交互。

代码

setInterval(dataObserver, 3000);

function dataObserver() {
  request(stateUrl, function (err, statusCode, data) {
    if (err) {
      log.message(data, "debug");
      log.message('0: ' + err.message, "error");
    } else {
      try {
        fightData = parseJson(data);
      } catch (error) {
        log.message('1: ' + error, "error");
      }

      matchCheck = fightData.remaining;
      statusCheck = fightData.status;

      setMatchType();
      setMatchStatus();

      if (matchStatus != oldStatus && matchType != 'Exhibition') {
        oldStatus = matchStatus;
        let redFighter = fightData.p1name;
        let blueFighter = fightData.p2name;
        let redBets = fightData.p1total;
        let blueBets = fightData.p2total;

        switch (matchStatus) {
          case 'open':
            break;
          case 'locked':
            break;
          case 'redWon':
            checkDatabase(redFighter, blueFighter);
            setTimeout(function () {
              addMatch(redFighter, blueFighter, redBets, blueBets, redFighter);
              addMatchResults(redFighter, blueFighter);
              addFavor(redFighter, blueFighter, redBets, blueBets);
            }, 10000);
            break;
          case 'blueWon':
            checkDatabase(redFighter, blueFighter);
            setTimeout(function () {
              addMatch(redFighter, blueFighter, redBets, blueBets, blueFighter);
              addMatchResults(blueFighter, redFighter);
              addFavor(redFighter, blueFighter, redBets, blueBets);
            }, 10000);
            break;
          default:
            log.message('Unknown match status!', "error");
            break;
        }
      }
    }
  })
};

// this is where the issue is
function checkDatabase(redFighter, blueFighter) {
  console.log('checking database!');
  db.query('select name from fightertable where name = any($1)', [[redFighter, blueFighter]], (err, res) => {
    console.log('we are inside check database query');
    if (err) {
      log.message('2: ' + err.message, "error");
    } else if (typeof res.rows[0] == 'undefined' && typeof res.rows[1] == 'undefined') {
      addFighterName(redFighter, blueFighter);
    } else if (res.rows[0].name == redFighter) {
      addFighterName(blueFighter);
    } else if (res.rows[0].name == blueFighter) {
      addFighterName(redFighter);
    } else {
      log.message('Database check failed!', "error");
    }
  });
}

这一行永远不会被执行:

console.log('we are inside check database query');

但是这个console.log('checking database!');可以!

我不知道为什么。我已经关注了 official Wiki,所以查询应该没问题。

更新

我继续按照建议使用 Knex,但它仍然无法正常工作,在同一个地方!除非我搞砸了 knex 语法,但我再次遵循了文档。未命中第 3 行和第 4 行。

enter image description here

0 个答案:

没有答案
相关问题