gpt4 book ai didi

javascript - 如何在 FeathersJS 服务扩展中使用 app.service ('myService' )?

转载 作者:行者123 更新时间:2023-12-01 00:21:41 25 4
gpt4 key购买 nike

我正在尝试在 FeathersJS 应用程序中扩展名为 properties 的服务的 find() 方法。

我需要的是在 find() 返回的所有记录中附加一个数组,其中的整数来自另一个名为 propertyadds 的服务。这意味着我需要更改我的回复

{
"total": 2973,
"limit": 10,
"skip": 0,
"data": [
{
"id": 1,
...
},
{
"id": 2,
...
}
...
]
}

{
"total": 2973,
"limit": 10,
"skip": 0,
data: [
{
"id": 1,
...
"additionals": [10,20,30]
},
{
"id": 2,
...
"additionals": [12,25,33]
}
...
]
}

其中additions中的值来自服务propertyadds,它管理一个像

这样的表
| property_id | additional_id |
|-------------|---------------|
| 1 | 10 |
| 1 | 20 |
| 1 | 30 |
| 2 | 12 |
| 2 | 25 |
| 2 | 33 |
|-------------|---------------|

我最初的想法是像这样扩展properties服务

const { Service } = require('feathers-sequelize');

exports.Properties = class Properties extends Service {
async find(data,params) {
let newResponse = await super.find(data,params);
let newData = newResponse.data.map(async pr => {
pr.additionals = await app.service('propertyadds').find({
properti_id: pr.id
})
return pr;
})
return {
total: newResponse.total,
limit: newResponse.limit,
skip: newResponse.skip,
data: newData
}
}
};

问题是我在 src/services/properties/properties.class.js 中没有 app 并且(因为我是 FeathersJS 的新手)我不知道不知道如何获取。

我需要什么才能有一个有效的 app const 来访问此模块内的所有服务?

最佳答案

事实上,当我访问src/services/properties.service.js并发现这一行时,解决方案就实现了

app.use('/properties', new Properties(options, app));

因此,服务 properties 实际上在其创建过程中接收了一个 app 对象。

学习这一点让我看到了正确的解决方案,用 src/services/properties/properties.class.js 编写,如下所示:

const { Service } = require('feathers-sequelize');

exports.Properties = class Properties extends Service {

constructor(options, app) {
super(options, app);
this.app = app;
}

async find(data, params) {
let oldRes = await super.find(data, params);
let newResData = oldRes.data.map(async pr => {
let includedRecords = await this.app.service('propertyadds').find({
query: {
property_id: pr.id
}
})
pr.additionals = includedRecords.map(e => e.additional_id).sort();
return pr;
})
return await Promise.all(newResData)
.then(completed => {
return {
total: oldRes.total,
limit: oldRes.limit,
skip: oldRes.skip,
data: completed
}
})
}
}

正如您所看到的,这是为扩展的 Properties 类创建一个 constructor 方法的问题,以便在 this 中公开 app 对象.app。这可以在调用 super(options,app) 以使 this 可用后完成。

在此之后,只需使用 this.app 创建另一个服务的实例,然后进行正确的异步调用即可。

关于javascript - 如何在 FeathersJS 服务扩展中使用 app.service ('myService' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com