Feathers: Государственные / частные услуги

Созданный на 8 окт. 2017  ·  4Комментарии  ·  Источник: feathersjs/feathers

Эй, ребята! Во-первых, я недавно открыл для себя перья, и должен сказать, что им действительно приятно пользоваться.
То, как мы можем предоставлять услуги с помощью rest или socket, действительно потрясающе.
Я использую его для создания REST api для интерфейса React, но я все еще немного потерялся в нескольких вещах.

Я не знаю, где разместить свои «частные» услуги. Например, у меня есть почтовая служба, использующая службу перевода для отправки переведенных писем пользователям (когда они регистрируются, забыли пароль и т. Д.). Эти службы никогда не будут доступны с остальным api, это чисто внутренняя служба. Пользователь, конечно, никогда не сможет отправить электронное письмо, отправив POST на / mailer. Но все же мне кажется, что мне нужно привязать свою службу к маршруту и ​​что демонстрация службы является поведением по умолчанию. Чтобы отключить "внешний" доступ к моей службе, я должен использовать хуки вроде hooks.disallow ('external') для всех методов перед обработкой моей службы, верно? Я что-то упустил или у нас есть более простой способ определить частные службы? Мне также не нравится, когда все мои службы (частные и общедоступные) находятся в одной папке (src / services). Стоит ли мне определять эти «частные услуги» совершенно по-другому? Например, просто добавив их в приложение, как этот app.set ('mailer', mailer), вы потеряете преимущества служебных перехватчиков. Можем ли мы использовать приложение в качестве контейнеров служб и каков рекомендуемый способ внедрения служб в другие службы? Получить их из приложения? Нравится app.service ('xxx')?
Также при использовании cli и создании сервиса. У каждой службы есть опция названия. Для чего используется это имя? Когда мы вызываем app.service (xxx), он разрешается службой, прикрепленной к пути xxx, верно?

Спасибо !

Самый полезный комментарий

Вы можете найти их сейчас по адресу перья-плюс / перья-крючки-общие # disallow .

Все 4 Комментарий

Чтобы отключить «внешний» доступ к моей службе, я должен использовать хуки, такие как hooks.disallow ('external')

Да, вам следует использовать что-то вроде:

app.use('/mypath', myservice)
app.service('/mypath').hooks({
  before: { all: [hooks.disallow('external')] } 
})

Стоит ли мне определять эти «частные услуги» совершенно по-другому?

Я предлагаю создать частное пространство имен, а затем использовать глобальный перехватчик. Всякий раз, когда вам нужен частный сервис, просто назовите его так /private/svc1 /private/svc2 , а затем создайте глобальный обработчик приложения, который условно применяет disallow('external') .

Вы можете сохранить структуру папок как хотите, важно только имя службы. Но я делаю и то, и другое. Как и все мои службы БД, находятся в папке БД, и я также называю их так: db/users ...


Например, просто добавив их в приложение, как этот app.set ('mailer', mailer), вы потеряете преимущества служебных перехватчиков.

Не хорошая идея. Продолжайте придерживаться app.use()


Можем ли мы использовать приложение в качестве контейнеров служб и каков рекомендуемый способ внедрения служб в другие службы? Получить их из приложения? Нравится app.service ('xxx')?

Рекомендуемый способ, которого я также придерживаюсь, - это использовать классы ES6 для служб, и в этом случае вы получите метод установки, который предоставляет объект app .

export default class Service {
 setup(app) {
    this.app = app;
    this.svc2 = app.service('svc2');
  }

  create(data) {
    // use this.svc2 here now 
  }
}

app.use('/service', new Service());

Также при использовании cli и создании сервиса. У каждой службы есть опция названия. Для чего используется это имя? Когда мы вызываем app.service (xxx), он разрешается службой, прикрепленной к пути xxx, верно?

Я не использую cli в своем проекте, так как это был скорее переход с экспресса, чем новый. Так что я не совсем уверен в этом аспекте. Но да, когда мы вызываем app.service('xyz') , он разрешает их по пути, который вы указали при добавлении службы app.use('xyz', new Xyz())

Спасибо @ subodhpareek18 , именно так 😄

Вы можете найти их сейчас по адресу перья-плюс / перья-крючки-общие # disallow .

Эта проблема была автоматически заблокирована, поскольку после ее закрытия в последнее время не было никаких действий. Пожалуйста, откройте новую проблему со ссылкой на эту проблему для связанных ошибок.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги