javascript - Loopback - 远程方法和展平相关模型查询结果
问题描述
我正在使用 Loopback 3 开发应用程序。我在 ServiceEvaluation 模型上创建了一个远程方法,以返回服务模型中的 ServiceEvaluations 和相关属性的列表。
ServiceEvaluation.evaluationList = function(cb) {
ServiceEvaluation.find({
fields: {
status: true,
createdAt: true,
serviceId: true
},
include: {
relation: 'rel_ServiceEval_Service',
scope: {
fields: {
serviceName: true,
supplierId: true
}
}
}
}, function(err, response) {
cb(null, response);
});
};
从返回的 API Explorer 调用时,上述方法有效;
{
"list": [
{
"status": "Draft",
"serviceId": "5b8e215d81c76325b409b960",
"createdAt": "2018-09-04T06:08:29.623Z",
"rel_ServiceEval_Service": {
"serviceName": "Workplace software and SaaS",
"id": "5b8e215d81c76325b409b960",
"supplierId": "5b8e215d81c76325b409b949"
}
}, ...
但是,我不想返回一个包含嵌入对象的对象数组,而是返回一个展平对象数组以显示在数据网格中。以下是这样做的尝试。
ServiceEvaluation.evaluationList = function(cb) {
ServiceEvaluation.find({
fields: {
status: true,
createdAt: true,
serviceId: true
},
include: {
relation: 'rel_ServiceEval_Service',
scope: {
fields: {
serviceName: true,
supplierId: true
}
}
}
}, function(err, response) {
var responseLength = response.length;
var myEntry = {};
var myList = [];
for (var i = 0; i < responseLength; i++) {
myEntry.status = response[i].status;
myEntry.createdAt = response[i].createdAt;
myEntry.serviceName = response[i].rel_ServiceEval_Service.serviceName;
myEntry.supplierId = response[i].rel_ServiceEval_Service.supplierId;
myList.push(myEntry);
}
cb(null, myList);
});
};
这样做的结果是远程方法似乎找不到 rel_ServiceEval_Service 中的字段。
{
"list": [
{
"status": "Draft",
"createdAt": "2018-09-04T06:20:40.889Z"
}, ...
我已经在客户端的服务中使用了扁平化的返回值,但这只是在 Dev 中的临时解决方案。有关如何在远程方法中执行此操作的任何指导?
解决方案
您需要使用 .toJSON() 来序列化返回的数据:
ServiceEvaluation.evaluationList = function(cb) {
ServiceEvaluation.find({
fields: {
status: true,
createdAt: true,
serviceId: true
},
include: {
relation: 'rel_ServiceEval_Service',
scope: {
fields: {
serviceName: true,
supplierId: true
}
}
}
}, function(err, response) {
var myEntry = {};
var myList = [];
async.map(response, function(singleItem,callback){
serializedSingleItem = singleItem.toJSON()
var myEntry = {status: serializedSingleItem.status, createdAt: serializedSingleItem.createdAt, serviceName: serializedSingleItem["rel_ServiceEval_Service"]["serviceName"], supplierId: serializedSingleItem["rel_ServiceEval_Service"]["supplierId"]}
callback(null, myEntry)
}, function(err, myList){
cb(null, myList)
})
});
};
推荐阅读
- python - Apscheduler cron 触发器未运行
- javascript - 嵌入上的 Discord.js 代码块格式
- .htaccess - 未找到 Ads.txt - 为 https 重定向正确配置 htaccess
- python - Python、多处理和内存:它是如何工作的?
- java - android studio - 如何停止可运行?
- r - 正则表达式匹配 R 中的日期
- java - 如何在android中获取桌面版网站的内容?
- css - 用户菜单导航背景颜色的 CSS 代码
- git - 如何从`git reset --hard`恢复我上次修改的提交?
- c - 为什么字符串数组只返回第一个元素,而不返回后续元素?