在我的应用程序中,我将方法放在客户端和服务器之间的共享位置。这种方式在meteor docs中建议,方法机制负责乐观的UI。
但我刚刚在David Weldon blog中读到了关于双层实现的内容,这对我来说很有意义。
问题是如何通过双层实现实现乐观的UI。
将方法移动到服务器,在模板事件中更新clientDB以获得乐观UI,并拒绝从客户端更新到DB的所有内容。
有没有办法在客户端提供方法,但只能从其他方法调用?
任何建议的方法都将受到赞赏。
答案 0 :(得分:1)
我认为重要的是拒绝客户端插入/更新。一旦完成,那么你可以从客户端运行第二层代码,它实际上不会做任何事情,因为它将被拒绝。
以下是https://www.discovermeteor.com/blog/meteor-pattern-two-tiered-methods/支持该观点的几段:
客户&服务器
虽然我说postSubmit函数主要是在服务器上运行,但它会在两种情况下在客户端上运行。
首先,当从postSubmit方法调用时,作为该方法的客户端模拟的一部分。在这种情况下,Meteor将执行模拟,在客户端数据库中插入帖子,然后最终触发服务器端postSubmit方法调用。
另一个用例是当有人直接从浏览器控制台调用postSubmit函数时。如果发生这种情况,Posts.insert()调用将失败,因为我们不允许客户端插入,也不会发生任何事情。
请注意,允许/拒绝不会影响从Meteor方法中执行的代码,这就是即使您没有声明允许/拒绝策略,模拟也不会失败的原因。
换句话说,回答#1:将方法保存在一个公共位置并删除不安全的包(流星删除不安全)
回答#2:如果在方法之外调用它们并不重要,因为它们会被拒绝。