gpt4 book ai didi

feathersjs - 带有羽毛的自定义结果

转载 作者:行者123 更新时间:2023-12-02 09:17:16 24 4
gpt4 key购买 nike

我一直在制作一个带有羽毛的 API 服务器。我有两个 Mongoose 服务。现在我的要求是我想要一个具有两种服务结果的 API。假设 product-masterproduct 是两个服务。我想要的输出是合并这两个服务。

为了实现这一点,我发现一种方法是 Hook 。所以我尝试了这个。

module.exports = function () {
return function (hook) {
let Product = hook.app.service('product').Model;

return new Promise(function(resolve, reject){
Product.find({}, function(err, products) {
var productMap = [];
products.forEach(function(product) {
productMap.push(products);
});
res.send(productMap);
console.log(productMap);
resolve(hook);
});
});
};
};

现在我在product-master的find方法之前调用了钩子(Hook)但是我不明白如何将product的记录合并到product-master 服务。

还有一件事是如何创建一个具有合并结果和自定义路由的不同 API,如 http://localhost:3030/products .

更新

我在 stackoverflow 上找到了一篇帖子,this可能会有帮助。

最佳答案

我认为你想做的事情有不同的方法。我还建议不要直接使用模型,而是使用你想要的服务(通过调用他们的 service methods )。您还想熟悉 API for hooks .然后你有一些选择:

1)修改现有结果

要修改现有服务调用的结果,请修改 after Hook 中的 hook.result:

module.exports = function () {
return function (hook) {
let productService = hook.app.service('product');

return productService.find({
paginate: false // Turn off pagination
}).then(products => {
hook.result.products = products;
return hook;
});
};
};

然后

const myHook = require('../../hooks/myhook');

app.service('products-master').hooks({
after: {
get: [ myHook() ]
}
});

这将在从 products-master 服务获取单个项目时添加一个 products 属性。

2) 设置hook.result

要跳过数据库调用,您可以将 hook.result 设置为您希望在 before Hook 中返回的内容。请记住,所有 after Hook 仍将运行。

3) 使用自定义服务

custom service 中你可以做任何你喜欢的事情,例如获取你需要的所有东西并手动将它们放在一起:

app.use('/all-products', {
find() {
return this.app.service('products-master').find(params).then(page => {
const promises = page.data.map(masterProduct => {
return this.app.service('products').find({
paginate: false,
query: {
masterProductId: masterProduct._id
}
}).then(products => {
// Add to masterProduct
masterProduct.products = products;
});
});

return Promise.all(promises).then(() => {
// Return `page` which has the modified data
return page;
});
});
},

setup(app) {
this.app = app;
}
});

在生成器中,可以通过选择custom service 并修改servicename.class.js 来创建自定义服务。

4) 填充钩子(Hook)

因为我认为您只想填充相关实体,您还可以查看 populate common hook .它可以自动完成这些事情。

5) 使用 Mongoose $populate

Mongoose Feathers adapter还支持 $populate query parameter这允许您引入您在 Mongoose 模型中定义的关系。

有关 Feathers 中关联的更多信息,请参阅 this FAQ .

关于feathersjs - 带有羽毛的自定义结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45712982/

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