[英]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.create
的Book.create
方法。 由於javascript沒有運算符重載,因此它沒有意識到您的重定義與僅包含兩個參數的較舊Book.create
沖突。
將函數重命名為make
來破壞遞歸:
BookSchema.statics.make = function...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.