我有一个带有API的index.js文件,它将gameData模型上传到mongoDB:`
var gameValue = require('../models/gameValues');
router.post('/add_game_to_dB', function(req, res, next) {
newGame = new gameValue(req.body);
newGame.save(function (err, game) {
if (err)
throw err;
res.json({
"id": game._id
});
});
});
然后我有一个.js文件,如果点击了按钮id并将游戏上传到数据库,则会检测到该文件:
$("#upVoteBattlefieldOne").click(function(event) {
console.log(event.target.name);
var newGameName = $("#BattlefieldOne .panel-heading").text();
newGameToDatabase(newGameName);
});
$("#upVoteBatmanTheEnemyWithin").click(function(event) {
console.log(event.target.name);
var newGameName = $("#BatmanTheEnemyWithin .panel-heading").text();
newGameToDatabase(newGameName);
});
function newGameToDatabase(name) {
$.get("/get_gameValues", function(data) {
if (data.length == 0) {
$.post("/add_game_to_dB", {
gameName: name
}, function(result) {
alert("Upvoted " + name);
});
}
for (var i = 0; i < data.length; i++) {
if (name === data[i].gameName) {
alert("game is in database already");
return;
} else {
$.post("/add_game_to_dB", {
gameName: name
}, function(result) {
alert("Upvoted " + name);
});
}
}
});
}
javascript似乎适用于我点击的第一个游戏。例如,如果我单击battlefield one,它会将其添加到数据库(如果尚未存在)。在战场上一个人在数据库上之后,它检测到具有“战地一号”的名称属性的文件在数据库上并且警告用户该游戏已经在数据库中。一旦我点击另一个游戏,即蝙蝠侠敌人,它将其他游戏添加到数据库,如果它还没有。如果我点击按钮将该游戏(将敌人蝙蝠侠)再次添加到数据库中,它会确认游戏在数据库上,但随后又将游戏添加到数据库中。它在第23行执行if循环,并且还执行else循环。如果if循环条件得到满足,我试图包含一个return语句退出函数,但似乎忽略了这个return语句并执行了那个else循环。如果我点击蝙蝠侠,反之亦然,那么战场就有这个问题。我是节点js和javascript的新手,所以我可能犯了一个愚蠢的错误,但我已经看了很长时间了,我似乎无法弄清楚
答案 0 :(得分:2)
我猜你应该使用变量标记现有状态并使用break in循环。
function newGameToDatabase(name) {
$.get("/get_gameValues", function(data) {
var alreadyExist = false;
for (var i = 0; i < data.length; i++) {
if (name === data[i].gameName) {
alert("game is in database already");
alreadyExist = true;
break;
}
}
if (!alreadyExist) {
$.post("/add_game_to_dB", {
gameName: name
}, function(result) {
alert("Upvoted " + name);
});
}
});
}