大家好! 首先,我最近发现了feathersjs,不得不说它真的很好用。
我们可以通过 rest 或 socket 公开服务的方式真的很棒。
我正在使用它为 React 前端构建 REST api,但我仍然对一些事情感到困惑。
我不知道把我的“私人”服务放在哪里。 例如,我有一个邮件服务,使用翻译服务向用户发送翻译后的电子邮件(当他们注册时,忘记密码,......)。 此服务永远不会与其余 api 一起公开,它纯粹是一个内部服务。 当然,用户永远无法通过向 /mailer 发送 POST 来发送电子邮件。 但是,似乎我需要将我的服务附加到路由,并且服务公开是默认行为。 要禁用对我的服务的“外部”访问,我必须在我的服务挂钩之前在所有方法上使用 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,因为它更像是从 express 的迁移而不是一个新的迁移。 所以我不完全确定这方面。 但是是的,当我们调用app.service('xyz')
,它会通过您在添加服务app.use('xyz', new Xyz())
时定义的路径来解析它们
谢谢@subodhpareek18 ,就是这样😄
你现在可以在feathers-plus/feathers-hooks-common#disallow找到这些。
此问题已自动锁定,因为它关闭后没有任何近期活动。 请打开一个新问题,并提供指向此问题的链接以获取相关错误。
最有用的评论
你现在可以在feathers-plus/feathers-hooks-common#disallow找到这些。