[英]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.