1
我是nodejs和Loopback/Express的新手。我试图编写一个涉及API调用的简单应用程序,它有多个相关模型的db请求,但我没有找到任何相关的文档或示例来说明这一点。远程方法中的相关模型的多个查询
想象一下3个模型:作者,发布和评级。每篇文章有一个作者,并拥有许多评级。评级有一个称为'星星'的整数值。
我创建的帖子被称为“细节”,这应该返回以下所有的自定义API remoteMethod:
- 帖子详细介绍
- 作者的详细信息(存储在相关作者机型)
- 具有分相关评分数目== 1
- 具有分相关评分数目== 2
- 相关评分数目具有分== 3
什么是最好的方式来实现这个最低和更平行的数据库查询?我已经使用Promises尝试了以下代码,但本质上这是一个效率低下的同步代码,它会对数据库进行多次不必要的查询,并且它很快变得非常混乱。
Post.details = function(id, cb) {
var LoopBackContext = require('loopback-context');
var app = require('../../server/server');
var Author = app.models.Author;
var Rating = app.models.Rating;
var response = {post: null,
author: null,
ratings_0: null,
ratings_1: null,
ratings_2: null
};
Post.findById(id, {include: 'author', where: {deleted: false}})
.then(function(p) {
response.post = p;
return Author.findById(p.authorId);
})
.then(function(r) {
response.author = r;
return Rating.find({where: {postId: id, stars: 0}});
})
.then(function(r) {
response.votes_0 = r.length;
return Rating.find({where: {postId: id, stars: 1}});
})
.then(function(r) {
response.votes_1 = r.length;
return Rating.find({where: {postId: id, stars: 2}});
})
.then(function(r) {
response.votes_2 = r.length;
cb(null, response);
});
};
这对于这样一件小事来说太过分了。我也尝试在查询中使用'include',但它也变得很难使用,并且它不支持Loopback中的二级过滤器。
实现此目的的最佳方式是什么?
您可以与Promise.all同时处理所有这些请求 –