我很困惑你什么时候会使用 isServer 块来放东西。显然,数据库调用等等。这会出现在客户端浏览器中吗?
3 回答
我建议不要使用它,而是按照非官方流星常见问题解答中的建议将您的东西放在文件夹中
即使您使用if (Meteor.isServer) {...}
此块,如果您不使用上面的文件夹结构(即放入/server
. 但它会忽略其中的所有代码。
在服务器端代码上,您将放置您只想在服务器上运行的代码,即发布功能,以及更敏感且用户不应该访问的数据。
我认为它确实会发送到客户端,除非它在服务器文件夹中。为了回应关于共享全局变量的评论之一,我一直在使用这种模式。分别在客户端和服务器文件夹中创建相同的全局变量,并在这些文件夹之外创建任何共享代码。通过测试来初始化每个地方的全局变量,看它是否已经存在。
MyVar = typeof MyVar === 'undefined' ? {} : MyVar;
然后,只需将方法放在需要它们的地方。例如,我将有一个 User 对象,该对象带有一个测试用户是否被授权的方法。我将在服务器全局用户上声明一次方法,在客户端全局用户上声明一次。这些方法不同,因为服务器版本会检查客户端上不可用的用户对象上的自定义属性。然后,在客户端和服务器上运行的 Meteor.methods 方法中,您可以调用授权方法,它会根据它是在客户端还是服务器上运行而调用不同的方法。
我今天问自己同样的问题,偶然发现了这个包裹:
https://github.com/mquandalle/meteor-minifiers
似乎 MeteorMeteor.isServer
默认情况下不会删除块。请参阅此讨论:
https://groups.google.com/forum/#!topic/meteor-talk/iHat47f6iGE
到目前为止我还没有使用它,但它看起来很有希望。
如果您不想使用额外的包,我建议使用client
andserver
文件夹。只有文件client
夹中的文件被发送到客户端。