我有一个在 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 行。