Так что, играя с узлом, подумал, что я напишу прямолинейный новостной тикер, чтобы поставить на мою минималистическую страницу узла, казалось, было весело. Дело в том, что я продолжаю получатьСтранный «RangeError: превышен максимальный размер стека вызовов»
RangeError: Maximum call stack size exceeded
Но я не могу на всю жизнь выяснить, где происходит ошибка. Высказывались некоторые дополнительные отладочные комментарии, даже удаленные части почти каждого файла, но все сводится к одному и тому же. Если я запустил приложение, он без проблем справится с прослушиванием на порту 3000. Если я попытаюсь получить к нему доступ, я получу сообщение об ошибке выше. Вот код app.js
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, stylus = require('stylus')
, nib = require('nib')
, mongo = require('mongodb')
, logger = require('express-logger')
, bodyParser = require('body-parser')
, methodOverride = require('express-method-override')
, errorhandler = require('errorhandler')
, monk = require('monk');
var app = express();
//Is this specifically for nib and stylus to work
function compile(str, path) {
return stylus(str)
.set('filename', path)
.use(nib())
}
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
//app.use(express.favicon());
//app.use(express.logger('dev'));
//app.use(express.bodyParser());
//app.use(express.methodOverride());
app.use(app.router);
app.use(stylus.middleware(
{ src: __dirname + '/public'
, compile: compile
}
));
app.use(express.static(path.join(__dirname, 'public')));
//development only
//if ('development' === app.get('env')) {
//app.use(express.errorHandler());
//}
//Lets do some stuff to get info from the database
var db = monk('localhost:27017/meetallnews');
var router = express.Router();
//Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});
app.get('/', routes.index);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
Кроме того, маршруты/index.js
console.log('Called index.routes');
var express = require('express');
var router = express.Router();
exports.index = function(req, res){
console.log('render page');
res.render('index', { title: 'Meet All' });
};
//This is to read from the database
router.get('/userlist', function(req, res) {
console.log('Called database');
var db = req.db;
var collection = db.get('sitenews');
collection.find({},{},function(e,docs){
res.render('newslist', {
"newslist" : docs
});
});
});
Любые предложения приветствуются, даже там, где начать смотреть. Я удалил весь раздел route.get выше и все равно получил ту же (или идентичную) ошибку. Пытался удалить материал из файла нефрита, в том объеме, в котором осталась только строка заголовка, все еще такое же сообщение об ошибке. И всегда после того, как сервер достиг конца app.js (сказал Сервер на порту 3000)
1. В какой версии Express вы используете? Вы используете маршрутизаторы, которые являются функциями express4, но при в то же время у вас есть 'app.use (app.router)', который устарел в этой версии. 2. Запрос, какой url вызывает ошибку 3. Является ли есть ли трассировка стека с ошибкой? 4. Можете ли вы предоставить источник наименьшей версии приложения (без всего, что вы говорите, что вы удалили), который все еще дает вам ошибку? – lukaszfiszer
трассировка стека будет огромной, но 5) попробовали ли вы заменить res.render (...) простым псевдонимом 'res.json ({})', так что не имеет значения, что происходит до него , а затем комментируя весь код перед этим, раскомментируя их один за другим, пока не нажмете бесконечную рекурсию? потому что тогда вы будете знать, что * вызывает ошибку. –