这个函数变得未定义,我不知道为什么



我正在尝试使用javascript, EJS和SQL(PostgreSQL)制作程序,但我有一个问题,使我的服务器崩溃,使我无法进一步。

。查询(SELECT * FROM public.games WHERE id= ${highscore.gameid})^TypeError: Cannot read property of undefined (reading 'gameid')

这是我的错误

我试图从我的数据库中删除数据,并试图改变这个函数,我也试图删除它,但它只是搞砸了我的代码更多。同样奇怪的是,我的代码工作了,但是第二天我得到了这个错误。

const getHighscore = async (id) => {
let highscore;
const pool = new Pool(credentials);
await pool
.query(`SELECT * FROM public.highscores WHERE id= ${id}`)
.then((res) => {
console.log(res.rows[0]);
highscore = res.rows[0];
});
await pool
.query(`SELECT * FROM public.games WHERE id= ${highscore.gameid}`)
.then((res) => (highscore.game = res.rows[0]));
return highscore;
};
Console.log(res.row[0]) = undefined
Console.log(res) = Result {
command: 'SELECT',
rowCount: 0,
oid: null,
rows: [],
fields: [
Field {
name: 'id',
tableID: 24601,
columnID: 1,
dataTypeID: 23,
dataTypeSize: 4,
dataTypeModifier: -1,
format: 'text'
},
Field {
name: 'username',
tableID: 24601,
columnID: 2,
dataTypeID: 1043,
dataTypeSize: -1,
dataTypeModifier: 34,
format: 'text'
},
Field {
name: 'gameid',
tableID: 24601,
columnID: 3,
dataTypeID: 23,
dataTypeSize: 4,
dataTypeModifier: -1,
format: 'text'
},
Field {
name: 'score',
tableID: 24601,
columnID: 4,
dataTypeID: 23,
dataTypeSize: 4,
dataTypeModifier: -1,
format: 'text'
},
Field {
name: 'active',
tableID: 24601,
columnID: 5,
dataTypeID: 16,
dataTypeSize: 1,
dataTypeModifier: -1,
format: 'text'
},
Field {
name: 'date',
tableID: 24601,
columnID: 6,
dataTypeID: 1082,
dataTypeSize: 4,
dataTypeModifier: -1,
format: 'text'
}
],
_parsers: [
[Function: parseInteger],
[Function: noParse],
[Function: parseInteger],
[Function: parseInteger],
[Function: parseBool],
[Function: parseDate]
],
_types: TypeOverrides {
_types: {
getTypeParser: [Function: getTypeParser],
setTypeParser: [Function: setTypeParser],
arrayParser: [Object],
builtins: [Object]
},
text: {},
binary: {}
},
RowCtor: null,
rowAsArray: false
}

根据您的日志,错误似乎是预期的。将highscore设置为res.rows[0],即undefined。因此,highscore上不存在gameid属性,因此出现错误。

如果res.rows是应该包含你的数据,那么基本上现在你没有得到所需的数据,或者它不存在。

一个更好的方法可能是只在highscore不是undefined或null,并且gameid属性存在时才执行此查询:

if (highscore && highscore.hasOwnProperty('gameid'))
await pool
.query(`SELECT * FROM public.games WHERE id= ${highscore.gameid}`)
.then((res) => (highscore.game = res.rows[0]));

请记住,即使未定义highscore仍然会返回,所以你的函数可能返回未定义

你也可以使用可选的链接来代替

`SELECT * FROM public.games WHERE id= ${highscore?.gameid}`

这样做可以避免由于highscore未定义而导致的错误,但这将是对查询的不必要调用

希望有帮助。

相关内容

最新更新