代码之家  ›  专栏  ›  技术社区  ›  Rahul

使用羽毛定制结果

  •  2
  • Rahul  · 技术社区  · 7 年前

    比如说 产品 有两种服务。我想要的输出是合并这两个服务。

    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);
      });
    });
    };
    };
    

    现在,我在查找方法之前调用了钩子 产品主控 但我不知道如何合并 产品主控 服务

    http://localhost:3030/products .

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

    1 回复  |  直到 7 年前
        1
  •  7
  •   Daff    7 年前

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

    要修改现有服务调用的结果,请修改 hook.result 在一个 after

    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 属性获取单个项目时 products-master 服务

    2) 设置

    要跳过数据库调用,可以设置 before 钩请记住 之后

    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 .

    因为我认为你只是想填充相关的实体,你也可以看看 populate common hook

    5) 使用猫鼬 $populate

    这个 Mongoose Feathers adapter 还支持 $populate query parameter 这让你可以引入你在猫鼬模型中定义的关系。

    this FAQ .