Я новичок в Node.js, и я сталкиваюсь с ошибкой:
RangeError: превышен максимальный размер стека вызовов
Я не могу в состоянии решить проблему, потому что большинство проблем со стеком в других вопросах stackoverflow о Node.js связаны с сотнями обратных вызовов, но у меня здесь только 3.
Сначала выборка ( findById
), затем обновление, а затем операция сохранения!
Мой код:
app.post('/poker/tables/:id/join', function(req, res) {
var id = req.params.id;
models.Table.findById(id, function(err, table) {
if (err) {
console.log(err);
res.send({
message: 'error'
});
return;
}
if (table.players.length >= table.maxPlayers) {
res.send({
message: "error: Can't join ! the Table is full"
});
return;
}
console.log('Table isnt Full');
var BuyIn = table.minBuyIn;
if (req.user.money < table.maxPlayers) {
res.send({
message: "error: Can't join ! Tou have not enough money"
});
return;
}
console.log('User has enought money');
models.User.update({
_id: req.user._id
}, {
$inc: {
money: -BuyIn
}
}, function(err, numAffected) {
if (err) {
console.log(err);
res.send({
message: 'error: Cant update your account'
});
return;
}
console.log('User money updated');
table.players.push({
userId: req.user._id,
username: req.user.username,
chips: BuyIn,
cards: {}
});
table.save(function(err) {
if (err) {
console.log(err);
res.send({
message: 'error'
});
return;
}
console.log('Table Successfully saved with new player!');
res.send({
message: 'success',
table: table
});
});
});
});
});
Ошибка возникает во время операции сохранения в конце!
Я использую MongoDb с mongoose, поэтому Table
и User
— это мои коллекции баз данных.
Это из моего первого проекта с Node.js, Express.js и MongoDB, поэтому я, вероятно, допустил огромные ошибки в асинхронном коде :(
РЕДАКТИРОВАТЬ: я попытался заменить сохранение обновлением:
models.Table.update({
_id: table._id
}, {
'$push': {
players: {
userId: req.user._id,
username: req.user.username,
chips: BuyIn,
cards: {}
}
}
}, function(err, numAffected) {
if (err) {
console.log(err);
res.send({
message: 'error'
});
return;
}
console.log('Table Successfully saved with new player!');
res.send({
message: 'success',
table: table
});
});
Но это не помогает, ошибка все еще возникает, и я не знаю, как ее отладить:/