feathersjs - как удаленно получать доступные сервисы
Я хочу загрузить наборы сервисов в мой интерфейс, не зная априори, что они такое. Я предполагаю, что могу установить ловушку на сервере, который просто обходит каталог службы и определяет службы (имена подкаталогов) и передает эту информацию обратно. На самом деле эта информация должна быть в экземпляре приложения в результате app.configure(services)
вызов?
Я сделал это перед использованием get
с особым _id
это подключается и возвращает другую информацию, чем запись коллекции. Моя проблема заключается в том, что, не зная имя службы, как я могу сформировать запрос сокета для сервера featherjs, который подключается (например, get
). Я полагаю, у меня всегда мог быть хотя бы один известный сервис (например, users
) что я могу добавить этот хук, но мне просто интересно, есть ли способ сделать то, что я хочу (выяснить, не зная имен сервисов).
Похоже, есть хуки уровня приложения https://docs.feathersjs.com/api/application.html, так как я могу вызвать один из них через сокет-клиент и получить результат обратно на клиенте.
ИМХО это должно быть частью клиентского API. Это позволило бы избежать жесткого кодирования имен служб или необходимости помещать их в какой-либо пользовательский файл конфигурации сборки для клиента.
1 ответ
Есть причины безопасности, почему это не доступно по умолчанию, и возврат списка всех служб на клиенте должен быть сделан способом, определенным для вашего приложения.
На сервере вы можете получить объект всех доступных сервисов через app.services, которые могут быть доступны клиенту довольно просто через пользовательский сервис:
app.use('/', {
async find () {
const services = Object.keys(app.services);
return { services };
}
});
Сейчас идем на корневой уровень (/
) перечислит названия всех доступных сервисов. Вы, вероятно, также хотите убедиться, что вызов защищен соответствующим образом, чтобы не все могли знать все конечные точки, на которые они могут атаковать.