【发布时间】:2016-07-14 02:02:52
【问题描述】:
如果有人能帮我解决这个问题,那就太好了。
我目前遇到了一个问题,调用此快速路由会在 RangeError 下方显示错误:超出最大调用堆栈大小
它似乎只在我包含 res.json(users[user]); 时发生功能。如果我用 res.send('Done'); 代替这个函数该功能运行良好。
我试过 setTimeout、setImmediate 和 process.nextTick,都给我同样的错误,差不多。
我有点希望这是我的一个愚蠢的错误。
//Send Friend Request
router.post('/send/friend/request', auth, function(req, res, next){
var query = User.find({$or: [
{username: req.body.username},
{username: req.payload.username}
]})
.select(' username friends notifications');
query.exec(function(err, users){
if(err) return next(err);
if(users.length < 2) console.log('/send/friend/request - There was an error in accessing the users from the db');
else{
//Identify users in array
var user = users.findIndex(function(element, index){
if(element.username === req.payload.username)
return element;
});
var requestUser = (user + 1) % 2;
//addFriends
users[user].friends.push({
user: users[requestUser],
});
users[requestUser].friends.push({
user: users[user],
sent: false
});
//notifications
users[user].notifications.push({
user: users[requestUser],
type: 0,
summary: "Your friend request has been sent to " + req.body.username +".",
status: "Pending..."
});
users[requestUser].notifications.push({
user: users[user],
type: 1,
summary: "You have a new friend request from " + req.payload.username + ".",
status: "Pending..."
});
users[requestUser].save(function(err){
if(err) return next(err);
});
users[user].save(function(err){
if(err) return next(err);
});
//Here lies the culprit
res.json(users[user]);
}
});
});
【问题讨论】: