Node.js 将rest api更新布尔值不止一次

Node.js 将rest api更新布尔值不止一次,node.js,rest,express,sequelize.js,insomnia,Node.js,Rest,Express,Sequelize.js,Insomnia,我正在使用node.js和expressrestapi开发一个应用程序来管理sqlite数据库后端。我使用sequelize作为orm。到目前为止,一切正常,但我发现了一个奇怪的错误,我无法解决。我有一个处理基本游戏设置的游戏端点,比如它是哪一个游戏,游戏的哪一个变体,以及如果游戏赢了或者有下一个玩家需要做动作时的标志 所以这个赢了和下一个玩家需要的是你已经猜到的布尔标志。我的模型如下所示: models/game.js: “严格使用”; module.exports=(sequelize,数据

我正在使用node.js和expressrestapi开发一个应用程序来管理sqlite数据库后端。我使用sequelize作为orm。到目前为止,一切正常,但我发现了一个奇怪的错误,我无法解决。我有一个处理基本游戏设置的游戏端点,比如它是哪一个游戏,游戏的哪一个变体,以及如果游戏赢了或者有下一个玩家需要做动作时的标志

所以这个赢了和下一个玩家需要的是你已经猜到的布尔标志。我的模型如下所示:

models/game.js:

“严格使用”;
module.exports=(sequelize,数据类型)=>{
const Game=sequelize.define(
“游戏”,
{
游戏:DataTypes.STRING,
变量:DataTypes.STRING,
inGame:DataTypes.STRING,
outGame:DataTypes.STRING,
won:DataTypes.BOOLEAN,
NextPlayerNeed:DataTypes.BOOLEAN
},
{}
);
Game.associate=函数(模型){};
回归游戏;
};
相应的迁移脚本是

迁移/game.js:

“严格使用”;
module.exports={
up:(查询接口,续集)=>{
返回queryInterface.createTable('Games'{
身份证:{
allowNull:错,
自动递增:真,
primaryKey:没错,
类型:Sequelize.INTEGER
},
游戏:{
allowNull:错,
类型:Sequelize.STRING
},
变体:{
allowNull:错,
类型:Sequelize.STRING
},
英加梅:{
阿洛诺:是的,
类型:Sequelize.STRING
},
胜出:{
阿洛诺:是的,
类型:Sequelize.STRING
},
韩元:{
allowNull:错,
类型:Sequelize.BOOLEAN
},
下一层需要:{
allowNull:错,
类型:Sequelize.BOOLEAN
},
创建数据:{
allowNull:错,
类型:Sequelize.DATE
},
更新日期:{
allowNull:错,
类型:Sequelize.DATE
}
});
},
向下:(查询接口,续集)=>{
返回queryInterface.dropTable('Games');
}
};
我的CRUD控制器/gameController.js如下所示:

const{Game}=require('../models');
常数fs=要求('fs');
module.exports={
getAllGames(需求、资源){
返回游戏。芬德尔({
属性:[
“id”,
“游戏”,
“变体”,
“inGame”,
“出局”,
"赢",,
“下一层需要”
]
})
.然后(游戏=>res.status(200).发送(游戏))
.catch(err=>res.status(400).send(err));
},
getSpecificGame(请求、恢复){
返回Game.findByPk(req.params.id{
属性:[
“id”,
“游戏”,
“变体”,
“inGame”,
“出局”,
"赢",,
“下一层需要”
]
}).然后(游戏=>{
如果(!游戏){
返回资源状态(404)。发送({
消息:`找不到id为${req.params.id}的游戏`
});
}
返回res.status(200)。发送(游戏);
});
},
createGame(请求、恢复){
返回游戏。创建({
游戏:req.body.game,
变量:req.body.variant,
inGame:req.body.inGame,
outGame:req.body.outGame,
韩元:错,
nextplayernedeed:false
})
.then(游戏=>res.status(201).json(游戏))
.catch(err=>res.status(400).send(err));
},
更新名称(请求、资源){
返回Game.findByPk(req.params.id{
属性:[
“id”,
“游戏”,
“变体”,
“inGame”,
“出局”,
"赢",,
“下一层需要”
]
})
.然后(游戏=>{
如果(!游戏){
返回资源状态(404)。发送({
消息:`找不到id为${req.params.id}的游戏`
});
}
回击赛
.更新({
游戏:req.body.game | | game.game,
变量:req.body.variant | | game.variant,
inGame:req.body.inGame | | game.inGame,
outGame:req.body.outGame | | game.outGame,
赢:req.body.won | | game.won,
nextplayered:req.body.nextplayered | | | game.nextplayered
})
.然后(()=>res.status(200).发送(游戏))
.catch(err=>res.status(400).send(err));
})
.catch(err=>res.status(400).send(err));
},
删除游戏(请求、恢复){
返回Game.findByPk(req.params.id{
属性:[
“id”,
“游戏”,
“变体”,
“inGame”,
“出局”,
"赢",,
“下一层需要”
]
})
.然后(游戏=>{
如果(!游戏){
返回资源状态(404)。发送({
消息:`找不到id为${req.params.id}的游戏`
});
}
回击赛
.销毁
。然后(()=>res.status(204.send())
.catch(err=>res.status(400).send(err));
})
.catch(err=>res.status(400).send(err));
}
};
现在是有趣的部分。我将失眠作为一个测试客户机使用,我可以更新实例化的游戏对象,说它赢了(true),并且它有nextplayernedeed(true)。因此,如果赢了,游戏结束,那么赢的永远不应该再次更新为false,那么在切换到下一个玩家后,nextplayerneded标志应该再次为false。但是如果将它们中的任何一个更新为true,就不可能再次更新为false。为什么呢?为什么我只能将这些字段更新一次

例如,这是我将标志更新为true的请求的响应:

{
  "id": 2,
  "game": "X01",
  "variant": "301",
  "inGame": "Straight",
  "outGame": "Double",
  "won": false,
  "nextPlayerNeeded": true,
  "updatedAt": "2020-01-21T10:47:23.767Z"
}
我可以随时更新所有字符串标志,但不能更新布尔标志


如果能得到任何提示,我将不胜感激。谢谢

我确实重构了我的项目,使用GraphQL Apollo服务器和客户端,而不是REST Api。虽然在这两种变体中我都使用sequelize GraphQL,但在需要时,它会多次更新。所以考虑这个未被回答但关闭的。< /P> < P>我使用Gracql阿波罗服务器和CLI重构了我的项目。