【问题标题】:feathersjs - how to remotely retrieve available servicesfeathersjs - 如何远程检索可用服务
【发布时间】:2018-12-28 14:05:10
【问题描述】:

我想在事先不知道它们是什么的情况下将服务集合加载到我的前端。我假设我可以在服务器上设置挂钩,该挂钩只需遍历服务目录并确定服务(子目录名称)并将此信息传回。事实上,作为app.configure(services) 调用的结果,该信息应该在应用实例中?

在使用带有特殊_idget 之前,我已经完成了此操作,该_id 被钩住并返回集合记录以外的其他信息。我的问题是,在不知道服务名称的情况下,我如何形成一个被钩住的featherjs 服务器的套接字请求(如get)。我想我总是可以拥有至少一个已知的服务(比如users),我可以添加那个钩子,但只是想知道是否有办法做我想做的事(在不知道任何服务名称的情况下找出)。

看起来有应用程序级别的钩子https://docs.feathersjs.com/api/application.html#hookshooks,那么我如何通过套接字客户端调用其中之一并将结果返回到客户端。

恕我直言,这应该是客户端 api 的一部分。这将避免服务名称的硬编码或必须将它们放在客户端的一些自定义构建配置文件中。

【问题讨论】:

    标签: feathersjs feathers-hook


    【解决方案1】:

    出于安全原因,默认情况下此功能不可用,应以特定于您的应用程序的方式返回客户端上所有服务的列表。

    在服务器上,您可以通过app.services 获取所有可用服务的对象,可以通过custom service 相当直接地提供给客户端:

    app.use('/', {
      async find () {
        const services = Object.keys(app.services);
    
        return { services };
      }
    });
    

    现在转到根级别 (/) 将列出所有可用服务的名称。您可能还想确保相应地保护调用,这样不是每个人都可以知道他们可以攻击的所有端点。

    【讨论】:

    • 既然你说我需要“定制”服务,那么我的问题的答案是否定的,对吗?为了发现其他可用的服务,必须至少有一个客户先验已知的服务名称。我想那么使用我建议的“用户”服务将是最好的选择,因为几乎总是会有这样的服务来确保访问安全。
    • 我不确定我是否理解你的问题。客户必须了解一些发现机制,所以为什么不使用已经存在的机制呢?由于名称是已知的,因此根级别服务是检索所需信息的好地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2021-04-13
    相关资源
    最近更新 更多