当我在端口8080上启动服务器时,它不会给我一个错误,但当我尝试浏览http://localhost:8080/nowjs/now.js
时,服务器会引发错误:
[RangeError: Maximum call stack size exceeded]
undefined
我尝试使用socket.io并且它工作正常。
答案 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(...);
}
}
}