Nowjs: [RangeError: максимальный размер стека вызовов]

Когда я запускаю сервер на порту 8080, он не дает мне ошибку, но когда я пытаюсь просмотреть http://localhost:8080/nowjs/now.js, сервер вызывает ошибку:

[RangeError: Maximum call stack size exceeded]
undefined

Я пробовал то же самое с socket.io, и он работал нормально.

Ответ 1

Хмм, если now.js использует date.js, может быть, ваша проблема здесь. Что ссылка говорит, что date.js пытается установить прототип toString to Date, но когда toString уже определена, вы получите круглую ссылку, упомянутую в других ответах.

В основном, говорят, что в date.js вы меняете

Date.prototype._toString=Date.prototype.toString

к

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

Я надеюсь, что это поможет кому-то. Это помогло мне.

Ответ 2

Aadit, прочитали ли вы следующее:

Максимальный размер стека вызовов во время вызова setTimeout

Uncaught RangeError: превышен максимальный размер стека вызовов, JavaScript

Итак, как вы видите, проблема, похоже, возникает из-за неправильного использования размеров стека. Если вы еще этого не знаете, вы можете прочитать здесь подробнее об этой проблеме, а также возможное решение: Максимальный размер стека стека превысил ошибку

Я не думаю, что это имеет какое-то отношение к порту, больше с методами/функциями в том, как вы взаимодействуете/используете стек.

И снова я могу ошибаться.; D

Ответ 3

У меня возникли две проблемы с now.js, которые вызывают это сообщение об ошибке. Надеюсь, один из них поможет вам.

Циркулярные ссылки

Вы не можете включать любые циклические ссылки в объекты, переданные в настоящее время, или метод расширения barf. Были некоторые оптимизации и обходные пути для этого, и теперь указан как закрытый вопрос, но я столкнулся с этим.

инициализировать() только один раз

Во-вторых, вы не можете дважды называть require('now').initialize(...) или два экземпляра немного интеллектуального разговора и раскачивать друг друга прямо из стека.

Вместо этого я создал everyone в app.js и передал его во все мои требования (...), которые должны ссылаться на теперь "карман".

В/app.js:

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

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

В маршрутах /index.js:

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

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