Soy nuevo en Node.js y me estoy enfrentando un error :

RangeError: Máxima de la pila de llamadas tamaño excedido

Yo no soy capaz de capaz de resolver el problema porque la mayoría de la pila de problemas en otros stackoverflow preguntas acerca de Node.js ofertas de hoteles con cientos de devolución de llamada, pero sólo tengo 3 aquí.

Primera fetch (findById) luego de una actualización, y más tarde una operación de guardar!

Mi código es :

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
});
});
});
});
});

El error se produce durante la operación de guardar en la final!

Puedo usar MongoDb con la mangosta para Table y User son mis colecciones de bases de datos.

Este es mi primer proyecto con Node.js,Express.js y MongoDB así que probablemente han hecho enormes errores en el código asincrónico 🙁

EDITAR: he intentado reemplazar el guardar con una actualización:

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
});
});

Pero no ayuda el error está todavía por llegar y no sé cómo depurar :/

  • Por favor coloque su respuesta en la sección de respuestas.
  • No se que haría un tamaño de pila problema, pero esta línea de seguro de que se ve mal: if(req.user.money < table.maxPlayers). Nada más sobresale como equivocado acerca de lo que estás haciendo.
  • puedes obtener ese tipo de error después de hacer varias peticiones o producirse después de la primera petición?
InformationsquelleAutor prdox | 2012-05-20

4 Comentarios

  1. 20

    He estado pasando por este problema también.
    Básicamente, cuando usted tiene una propiedad con un ref, y desea utilizar en una búsqueda, por ejemplo, no puede pase todo el documento.

    Por ejemplo:

    Model.find().where( "property", OtherModelInstance );

    esto activará ese error.

    Sin embargo, usted tiene 2 maneras de solucionar esto por ahora:

    Model.find().where( "property", OtherModelInstance._id );
    //or
    Model.find().where( "property", OtherModelInstance.toObject() );

    Esto puede dejar sus problemas por ahora.

    Hay un problema en su repo de GitHub donde me informó de esto, sin embargo, es sin corrección por ahora. Ver el tema aquí.

    • Por favor marca este como el derecho de respuesta
    • Jup, se topó con el mismo problema hace dos meses, la arreglaron, pero no grabar, cómo… Ahora me topé de nuevo, que me obligó a buscar este post y upvote 😉
  2. 5

    Yo seguía recibiendo este error y finalmente entendí. Es muy difícil depurar dado que en realidad no se presenta la información en el error.

    Resulta que yo estaba tratando de guardar un objeto en un campo. Guardar sólo una propiedad específica del objeto, o JSON stringifying es, trabajó como un encanto.

    Parece que sería bueno si el conductor dio un error más específica, pero bueno.

    • Al proporcionar respuestas a viejas preguntas que ayuda a explicar por qué su respuesta difiere de los ya existentes. En este caso, su respuesta se ve como un subconjunto de la proporcionada por gustavohenke.
  3. 4

    Hay un par de maneras para depurar nodejs aplicaciones

    Depurador integrado

    La Node.js depurador está documentado aquí: http://nodejs.org/api/debugger.html

    Para colocar puntos de interrupción, simplemente poner debugger; en el lugar que usted desea romper. Como dijo el table.save de devolución de llamada está dando problemas, se puede poner un punto de interrupción dentro de esa función.

    A continuación, ejecutar el nodo con el depurador activado:

    node debug myscript.js

    Y usted obtendrá más útil de salida.

    La investigación de la pila

    También puede utilizar console.trace para imprimir un stacktrace, si usted tiene una buena idea de cuándo/dónde te encuentras con problemas, y quiere averiguar cómo llegó allí.

    Buena suerte, espero que esto ayude!

    • Gracias por tu respuesta. Yo no sabía que el depurador integrado existido – pensé que tenía que configurar el nodo-inspector si quería inspeccionar mi código!
    • Me alegro funcionó! por favor, «aceptar», mi respuesta como la solución si te ha gustado.
  4. 4

    MyModel.collection.insert causas:

    [RangeError: Máxima de la pila de llamadas tamaño excedido]

    Cuando se pasa de la matriz de instancias de MyModel en lugar de simplemente matriz con los valores de los objetos.

    RangeError:

    let myArray = [];
    myArray.push( new MyModel({ prop1: true, prop2: false }) );
    MyModel.collection.insert(myArray, callback);

    Ningún error:

    let myArray = [];
    myArray.push( { prop1: true, prop2: false } );
    MyModel.collection.insert(myArray, callback);

Dejar respuesta

Please enter your comment!
Please enter your name here