10

ポート 8080 でサーバーを起動するとエラーは発生しませんがhttp://localhost:8080/nowjs/now.js、サーバーを参照しようとするとエラーが発生します。

[RangeError: Maximum call stack size exceeded]
undefined

私はsocket.ioで同じことを試しましたが、うまくいきました。

4

3 に答える 3

8

Hmm, if now.js uses date.js, maybe your issue lies here. What the link says is that date.js tries to set a toString to Date prototype, but when toString is already defined, you get the circular reference mentioned in the other answers.

Basically, they say that in date.js, you change

Date.prototype._toString=Date.prototype.toString

to

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

I hope it will help someone. It helped me.

于 2012-11-19T19:37:42.350 に答える
5

Aadit、次の内容を読みましたか。

setTimeout 呼び出し中に呼び出しスタックの最大サイズを超えました

キャッチされない RangeError: 最大呼び出しスタック サイズを超えました、JavaScript

ご覧のとおり、スタック サイズの不適切な使用が原因で問題が発生しているようです。まだお読みでない場合は、この問題の詳細と考えられる解決策をこちらでお読みください: Maximum call stack size exceeded error

ポートとは何の関係もないと思いますが、スタックを操作/使用する方法/関数とは関係ありません。

繰り返しますが、私は間違っているかもしれません。;D

于 2012-06-05T16:53:24.300 に答える
4

このエラー メッセージを生成する now.js には 2 つの問題がありました。うまくいけば、そのうちの1つがあなたを助けます。

循環参照

現在渡されているオブジェクトに循環参照を含めることはできません。そうしないと、extend メソッドが barf します。これにはいくつかの最適化と回避策があり、現在は 解決済みの問題としてリストされていますが、私はそれに遭遇しました。

initialize() は一度だけ

2 つ目は、2 回コールしないrequire('now').initialize(...)か、2 つのインスタンスが少し知的な会話をして、スタックからすぐに競合することです。

代わりに私がしたことはeveryone、app.js で作成し、現在の「ポケット」を参照する必要があるすべての require(...) メソッドに渡すことでした。

/app.js で:

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

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

routes/index.js で:

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

   return {
       send: function() {
           everyone.now.clientFxn(...);
       }
   }
}
于 2012-06-10T04:19:51.790 に答える