奇怪" RangeError:超出最大调用堆栈大小"

时间:2014-11-25 22:53:12

标签: node.js mongodb

所以玩弄节点,以为我会写一个直接的新闻自动收录器放在我非常简约的节点页面上,看起来很有趣。问题是,我一直在

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部分,但仍然得到相同(或相同)的错误。试图从jade文件中删除东西,只剩下标题行,仍然是相同的错误消息。并且始终在服务器到达app.js的末尾(在端口3000上说服务器)

1 个答案:

答案 0 :(得分:0)

非常感谢lukaszfiszer和Pomax先生。

原来错误信息有点误导,让我觉得它是某种永恒的循环或数据库中的一些奇怪的东西。

这是因为我是一个可怕的小偷并且从路径的某个地方窃取了一些代码,并且当还有app.use(app.router);

时缺少删除行routes = require('./routes')

一旦删除,我就会得到一个全新的错误,我知道它来自何处以及它是什么(与此问题没有真正关系,只能证明必须测试未经测试的编码。