2012-05-31 13 views
10

Quando avvio il server sulla porta 8080 che non mi dà un errore, ma quando sto cercando di navigare in http://localhost:8080/nowjs/now.js il server genera un errore:Nowjs: [RangeError: Dimensione massima stack di chiamate superato]

[RangeError: Maximum call stack size exceeded]
undefined

Ho provato lo stesso con socket.io e ha funzionato bene.

+0

vedere questo http://javascriptrules.com/2009/06/30/limitation-on-call-stacks/ –

+0

con lo stesso numero –

+0

Potrebbe includere alcuni esempi di codice o anche un violino che riproduce il problema? Se non trovi la fonte nel processo, allora forse potremmo individuarlo :) – Kato

risposta

5

Aadit, hai letto il seguente:

Maximum Call Stack Size Exceeded During a setTimeout Call

Uncaught RangeError: Maximum call stack size exceeded, JavaScript

Quindi, come si può vedere il problema sembra essere derivante a causa del un uso improprio di stack. Se non lo hai già si può leggere un po 'di più su questo problema in dettaglio qui insieme ad una possibile soluzione : Maximum call stack size exceeded error

io non penso che abbia qualcosa a che fare con la porta, più con i metodi/funzioni nel modo in cui stai interagendo/usando lo stack.

Quindi, di nuovo, potrei sbagliarmi. ; D

+0

so già su stack di chiamate in JavaScript. Quello che volevo sapere era perché la nuova versione di 'now.js' interrompeva improvvisamente il codice esistente. –

+0

È questo? http://stackoverflow.com/questions/10896167/nowjs-running-node-and-nowjs-on-a-hosted-server-error-maximum-call-stack-s –

+0

No. Non ha funzionato per me. Sto usando il nodo v0.6.18 che è l'ultima versione stabile. –

4

Ho avuto due problemi con now.js che producono questo messaggio di errore. Speriamo che uno di loro ti possa aiutare.

riferimenti circolari

Non è possibile includere tutti i riferimenti circolari in oggetti passati in ora, o è estendere metodo sarà vomitare. C'erano alcune ottimizzazioni e soluzioni alternative per questo ed è ora listed as an closed issue, ma ci ho provato.

initialize() una sola volta

In secondo luogo, non può chiamare require('now').initialize(...) due volte o le due istanze hanno a little intellectual conversation e gara ogni altro diritto fuori della pila.

Quello che ho fatto invece è stato creare everyone in app.js e passarlo in tutti i miei metodi di richiesta (...) che devono fare riferimento all'ora "pocket".

In /app.js:

var conf = { 
    everyone: require('now').initialize(app) 
    port: 3000, 
    // etc... 
}; 

require('./routes')(conf) 
// etc... 

in percorsi/index.js:

module.exports = function(conf) { 
    var everyone = conf.everyone; 

    return { 
     send: function() { 
      everyone.now.clientFxn(...); 
     } 
    } 
} 
+0

++ per il riferimento nuklearpower che aiuta a spiegare la tua risposta – Seiyria

6

Hmm, se now.js utilizza date.js, forse il problema risiede here. Quello che dice il link è che date.js prova a impostare un prototipo toString to Date, ma quando toString è già definito, si ottiene il riferimento circolare menzionato nelle altre risposte.

Fondamentalmente, dicono che in data.js, si cambia

Date.prototype._toString=Date.prototype.toString 

a

if(Date.prototype._toString==undefined) {Date.prototype._toString=Date.prototype.toString;} 

Mi auguro che possa aiutare qualcuno. Mi ha aiutato.

+1

Questo mi ha salvato! Funziona alla grande. Grazie. –

+1

Sei un DIO! Grazie –

Problemi correlati