feathersjs - как удаленно получать доступные сервисы - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу загрузить наборы сервисов в свой интерфейс, не зная априори, что это такое.Я предполагаю, что могу установить ловушку на сервере, который просто обходит каталог службы и определяет службы (имена подкаталогов) и передает эту информацию обратно.Фактически, эта информация должна быть в экземпляре приложения в результате вызова app.configure(services)?

Я делал это прежде, чем использовать get со специальным _id, который подключается и возвращает другую информациючем запись коллекции.Моя проблема заключается в том, что, не зная имени службы, как я могу сформировать запрос сокета для сервера featherjs, который подключается (например, get).Я полагаю, что у меня всегда может быть хотя бы один известный сервис (например, users), к которому я могу добавить этот хук, но мне просто интересно, есть ли способ сделать то, что я хочу (узнать, не зная ни одного названия сервиса).

Похоже, есть ловушки уровня приложения https://docs.feathersjs.com/api/application.html#hookshooks, так как я могу вызвать один из них через сокет-клиент и получить результат обратно на клиенте.

ИМХО это должно быть частьюклиентский интерфейсЭто позволило бы избежать жесткого кодирования имен служб или необходимости помещать их в какой-либо пользовательский файл конфигурации сборки для клиента.

1 Ответ

0 голосов
/ 28 декабря 2018

Существуют причины безопасности, по которым это недоступно по умолчанию, и возвращение списка всех служб на клиенте должно выполняться способом, специфичным для вашего приложения.

На сервере вы можете получить объектвсе доступные сервисы через app.services , которые могут быть доступны клиенту довольно просто через пользовательский сервис :

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

    return { services };
  }
});

Теперь переход на корневой уровень (/) перечислит названия всех доступных сервисов.Возможно, вы также захотите убедиться в безопасности вызова соответствующим образом, чтобы не каждый мог знать все конечные точки, на которые они могут атаковать.

...