Node.js “奇怪”;RangeError:超过最大调用堆栈大小;
所以,在node上玩,我想我会写一个直截了当的新闻代码,放在我非常简约的node页面上,看起来很有趣。问题是,我一直在Node.js “奇怪”;RangeError:超过最大调用堆栈大小;,node.js,mongodb,Node.js,Mongodb,所以,在node上玩,我想我会写一个直截了当的新闻代码,放在我非常简约的node页面上,看起来很有趣。问题是,我一直在 RangeError: Maximum call stack size exceeded 但我一辈子都搞不清楚错误发生在哪里。 抛出的是一些额外的调试注释,甚至删除了几乎每个文件的部分,但归根结底都是一样的。如果我启动应用程序,它就可以毫无问题地监听端口3000。如果我试图访问它,我会收到上面的错误消息。 下面是app.js代码 var express = require(
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'));
});
另外,routes/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上)非常感谢卢卡斯·齐菲泽和波马克斯先生 事实证明,错误消息有点误导,让我认为这是某种永恒的循环或数据库中的一些奇怪的东西 这是因为我是一个可怕的小偷,从某个地方偷了一些路由代码,并且没有删除行
app.use(app.router)代码>同时具有routes=require('./routes')
删除后,我得到了一个全新的错误,我知道它来自何处,它是什么(与此问题无关,只是证明必须测试未经测试的编码。1.您使用的是哪个版本的express?您使用的是路由器,它是express4功能,但同时您有app.use(app.router)
此版本中已弃用的应用程序。2.请求哪个url会导致错误3.是否有任何包含错误的堆栈跟踪?4.您能否提供仍会导致错误的最小版本的应用程序(没有您所说的已删除的所有内容)的源代码?堆栈跟踪将非常庞大,但5)您是否尝试过将res.render(…)替换为一个普通的res.json({})
,这样之前发生的事情就无关紧要了,然后注释掉之前的所有代码,逐个取消注释,直到达到无限递归?因为这样你就会知道是什么导致了这个错误。