繁体   English   中英

没有递归函数,仍然出现最大调用堆栈大小超出错误

[英]No recursive function, still getting a Maximum call stack size exceeded error

我正在尝试使用Node,Express和Mongoose。 这是我的模型的一部分book-model.js ,该模型导出其模式和方法供控制器使用。 我正在实现胖模型,瘦控制器方法:

// ...

BookSchema.statics.create = function(title, author, category, callback) {
    var Book = mongoose.model('Book');
    Book.create({
        title: title,
        author: author,
        category: category
    }, callback);
};

// ...

module.exports = mongoose.model('Book', BookSchema);

这是控制器的一部分books-controller.js

// ...

var Book = require('./book-model');

router.post('/', function(req, res) {
    var title = req.body.title,
        author = req.body.author,
        category = req.body.category;
    Book.create(title, author, category, function(err) {
        if (err) {
            console.log(err);
            res.redirect('/add-book');
        }
        res.redirect('/books');
    });
});

// ...

现在,当我尝试创建新的书本文档时,出现了令人讨厌的“ 超出最大调用堆栈大小”消息。 我在SO上看到了一个类似的问题: 最大调用堆栈大小超出错误 ,答案是“在代码中的某个地方,您正在调用一个函数,该函数依次调用另一个函数,依此类推,直到您到达调用堆栈为止极限。这几乎总是因为没有满足基本情况的递归函数。”

我在books-controller.js文件中看不到具有未满足的基本情况或缺少的基本情况的递归函数?

请指教。

这是您的递归:

BookSchema.statics.create = function(title, author, category, callback) {
    var Book = mongoose.model('Book');
    Book.create({
        title: title,
        author: author,
        category: category
    }, callback);
};

基本上,您要声明一个调用Book.createBook.create方法。 由于javascript没有运算符重载,因此它没有意识到您的重定义与仅包含两个参数的较旧Book.create冲突。

将函数重命名为make来破坏递归:

BookSchema.statics.make = function...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM