Nowjs:[RangeError:超出最大调用堆栈大小]

时间:2012-05-31 05:48:37

标签: javascript node.js nowjs-sockets

当我在端口8080上启动服务器时,它不会给我一个错误,但当我尝试浏览http://localhost:8080/nowjs/now.js时,服务器会引发错误:

[RangeError: Maximum call stack size exceeded]
undefined

我尝试使用socket.io并且它工作正常。

3 个答案:

答案 0 :(得分:7)

嗯,如果now.js使用date.js,也许你的问题就在于here。链接说的是date.js尝试将toString设置为Date原型,但是当已定义toString时,您将获得其他答案中提到的循环引用

基本上,他们说在date.js中,你改变了

Date.prototype._toString=Date.prototype.toString

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

我希望它会帮助别人。它帮助了我。

答案 1 :(得分:5)

Aadit,您是否阅读了以下内容:

Maximum Call Stack Size Exceeded During a setTimeout Call

Uncaught RangeError: Maximum call stack size exceeded, JavaScript

因此,您可能会发现问题似乎是因为堆栈大小使用不当而引起的。如果您还没有,可以在此处详细了解此问题以及可能的解决方案Maximum call stack size exceeded error

我不认为它与端口有任何关系,更多的是与您交互/使用堆栈的方式/函数有关。

然后,我可能错了。 ; d

答案 2 :(得分:4)

我遇到了两个生成此错误消息的now.js问题。希望他们中的一个会帮助你。

循环参考

您不能在传递到现在的对象中包含任何循环引用,或者它的extend方法将为barf。对此有一些优化和解决方法,它现在是listed as an closed issue,但我遇到了它。

只能初始化()一次

其次,你可能不会两次调用require('now').initialize(...),或者两个实例都有a little intellectual conversation并且在堆栈之外相互竞争。

我所做的是在app.js中创建everyone并将其传递给所有需要引用现在“口袋”的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(...);
       }
   }
}