Node.js + mangouste [RangeError: le Maximum de la pile d'appels de taille dépassait]
Je suis nouvelle Node.js et je suis confronté à une erreur :
RangeError: le Maximum de la pile d'appels de taille dépassait
Je ne suis pas en mesure en mesure de résoudre le problème parce que la plupart de la pile problèmes relatifs à d'autres questions sur stackoverflow Node.js offres spéciales avec des centaines de rappel mais je n'ai que 3 ici.
D'abord un fetch (findById
) puis une mise à jour d'une version ultérieure d'une opération d'enregistrement!
Mon code est :
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
});
});
});
});
});
L'erreur se produit pendant l'enregistrement de l'opération à la fin!
J'utilise MongoDb avec mangouste afin Table
et User
sont ma base de données des collections.
C'est à partir de mon premier projet avec Node.js,Express.js et MongoDB, donc j'ai probablement fait d'énormes erreurs dans le code asynchrone 🙁
MODIFIER: j'ai essayé de remplacer l'enregistrer avec une mise à jour:
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
});
});
Mais il n'aide pas l'erreur est encore à venir et je ne sais pas comment faire pour déboguer :/
- Veuillez placer votre réponse dans la section réponse.
- Non pas qu'il serait la cause d'une pile de problème de taille, mais cette ligne est fausse:
if(req.user.money < table.maxPlayers)
. Rien d'autre sort que de mal sur ce que vous faites. - vous obtenez cette erreur après avoir fait plusieurs demandes ou faut-il se produire après la première demande?
Vous devez vous connecter pour publier un commentaire.
J'ai été en passant pour ce problème aussi.
Fondamentalement, lorsque vous avez une propriété avec un
ref
, et que vous voulez l'utiliser dans une recherche, par exemple, vous ne peut pas passer l'ensemble du document.Par exemple:
cela va déclencher d'erreur.
Cependant, vous avez 2 moyens de remédier à cela pour l'instant:
Il peut cesser de vos problèmes pour l'instant.
Il y a un problème dans leur dépôt GitHub où j'ai rapporté ceci, cependant, c'est sans résoudre pour l'instant. Voir la question ici.
J'ai continué à obtenir cette erreur et enfin compris. Il est très difficile de déboguer puisque aucune vraie information est présentée dans l'erreur.
S'avère que j'essayais de mettre un objet dans un champ. Enregistrement d'une propriété de l'objet, ou JSON stringifying elle, a travaillé comme un charme.
Semble que ce serait bien si le driver a donné une erreur plus spécifique, mais bon.
Il existe quelques façons pour déboguer les applications nodejs
Débogueur intégré
L'Node.js le débogueur est documenté ici: http://nodejs.org/api/debugger.html
À placer des points d'arrêt, il suffit de mettre
debugger;
à l'endroit que vous souhaitez casser. Comme vous l'avez dit latable.save
de rappel est de vous donner des ennuis, vous pourrait mettre un point d'arrêt à l'intérieur de cette fonction.Ensuite, vous exécutez nœud avec le débogueur activé:
Et vous obtiendrez plus utile de sortie.
De l'enquête de la pile
Vous pouvez également utiliser
console.trace
pour imprimer une stacktrace, si vous avez une bonne idée de quand/où vous rencontrez des problèmes, et veulent comprendre comment vous en êtes arrivé là.Bonne chance, j'espère que cela aide!
MyModel.collection.insert
causes:Lorsque vous passez tableau d'instances de
MyModel
au lieu de simplement un tableau avec les valeurs des objets.RangeError:
Pas d'erreur: