我想增加我的游戏选择(您可以在下面看到),但不幸的是我的选择不起作用,它引发了异常。
我想进行以下sql查询:
Select * from Games
where userId = 3
order by createdAt desc
gameController.js:
exports.increaseScore = async (req, res) => {
const userId = res.userId;
try {
const game = await Game.findOne({ where: { userId: userId } }, { limit: 1, order: [['createdAt', 'DESC']] });
game.score += 1;
await game.save();
res.status(200).json("Score increased successfully!");
} catch (err) {
res.status(400).json(err);
}
};
gameModell.js:
const Game = sequelize.define("Games", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
unique: true,
},
score: {
type: Sequelize.INTEGER,
allowNull: false
},
difficulty: {
type: Sequelize.INTEGER,
allowNull: false
},
});
exports.Game = Game;
游戏与用户的关系:
const userModel = require('./models/user');
const gameModel = require('./models/game');
userModel.hasMany(gameModel.Game, { foreignKey: 'userId' });
gameModel.Game.belongsTo(userModel, { foreignKey: 'userId' });
您指定了除
where
以外的选项作为 findOne
的第二个参数,尽管您需要在第一个参数中全部指定它们:
const game = await Game.findOne({
where: { userId: userId },
// limit: 1,
order: [['createdAt', 'DESC']]
});
此外,也无需指明
limit
,因为 findOne
已经自动执行了(这就是为什么它的名字是关于 one
,而不是 findAll
)。