我有一个续集模型 comment ,它与自己有一个belongsTo关系,用于表示父评论,如果有的话,如下:
var answer = confirm("Yes or no?")
我试图通过简单的RESTful API获取属于特定文章ID的所有评论:
models.comment.belongsTo(models.comment, {
as: 'parent',
foreignKey: 'parentId'
});
Sequelize中的getChildren()实例方法通过查找父级是该注释的任何其他注释(即回复)来返回任何注释的直接子级。 适用于第一层回复,例如:
router.get('/article/:id/comments', (req, res, next) => {
models.comment.findAll({
where: {
articleId: req.params.id,
parentId: null
}
}).then(roots => {
// iterate thru each root asynchronously and get its children
async.each(roots, (root, callback) => {
root.getChildren().then(children => {
// set the object's children to this result
root.children = children;
callback();
});
}, (err) => {
if(!err) {
return res.status(200).json(roots);
}else {
return res.status(400).json({error: err});
}
});
}).catch(err => {
return res.status(400).json({error: err});
});
});
但是,如果我添加更多深度,它就不会。方法如下:
- Parent 1
- Child 1
- Child 2
- Child 3 << This one isn't included
- Child 4 << Obviously, this one neither
- Parent 2
- Child 5
- Child 6
如何实现递归逻辑,以便getChildren()调用自身在嵌套注释中获取N层深度,并返回一个完整结构化的JSON数据树以用于前端?我没有很好地研究递归,当你必须在nodejs中异步完成所有事情时,我遇到了问题。
我不是在寻找MySQL解决方案。
谢谢。