当前位置:  开发笔记 > 编程语言 > 正文

羽毛调用自定义API方法

如何解决《羽毛调用自定义API方法》经验,为你挑选了1个好方法。

我用下面的内容定义我的api:

class MyFeathersApi {
  feathersClient: any;
  accountsAPI: any;
  productsAPI: any;

  constructor(app) {
    var port: number = app.get('port');

    this.accountsAPI = app.service('/api/accounts');
    this.productsAPI = app.service('/api/products');
  }

  findAdminAccounts(filter: any, cb: (err:Error, accounts:Models.IAccount[]) => void) {
    filter = { query: { adminProfile: { $exists: true } } }
    this.accountsAPI.find(filter, cb);
  }

当我想使用数据库适配器方法时,从客户端,即查找和/或创建,我执行以下操作:

var accountsAPIService = app.service('/api/accounts');
accountsAPIService.find( function(error, accounts) {
  ...
});

我如何从客户端调用自定义方法,例如findAdminAccounts()?



1> Daff..:

您只能使用客户端上的普通服务接口.我们发现对自定义方法的支持(以及它带来的所有问题,从明确定义的接口到任意方法名称和参数)并不是必需的,因为本身的所有内容都可以描述为资源(服务).

到目前为止,这些好处(如安全性,可预测性和发送定义良好的实时事件)在概念化应用程序逻辑时大大超过了所需思维的微小变化.

在您的示例中,您可以创建一个包装器服务,获取管理员帐户,如下所示:

class AdminAccounts {
  find(params) {
    const accountService = this.app.service('/api/accounts');

    return accountService.find({ query: { adminProfile: { $exists: true } } });
  }

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

app.use('/api/adminAccounts', new AdminAccounts());

或者,您可以实现一个钩子,将查询参数映射到更大的查询,如下所示:

app.service('/api/accounts').hooks({
  before: {
    find(hook) {
      if(hook.params.query.admin) {
        hook.params.query.adminProfile = { $exists: true };
      }
    }
  }
});

这现在可以调用类似的东西/api/accounts?admin.

有关更多信息,请参阅此FAQ.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有