簡體   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