Эй, ребята! Во-первых, я недавно открыл для себя перья, и должен сказать, что им действительно приятно пользоваться.
То, как мы можем предоставлять услуги с помощью 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, верно?
Спасибо !
Чтобы отключить «внешний» доступ к моей службе, я должен использовать хуки, такие как 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 .
Эта проблема была автоматически заблокирована, поскольку после ее закрытия в последнее время не было никаких действий. Пожалуйста, откройте новую проблему со ссылкой на эту проблему для связанных ошибок.
Самый полезный комментарий
Вы можете найти их сейчас по адресу перья-плюс / перья-крючки-общие # disallow .