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