我很困惑你何时会使用isServer块来填充内容。显然,数据库调用等等。这是否会显示在客户端浏览器中?
答案 0 :(得分:7)
我建议不要使用它,而是按照unofficial meteor faq
的建议把你的东西放在文件夹中即使您使用if (Meteor.isServer) {...}
,如果您不使用上面的文件夹结构,即将其放入/server
,此块仍会被发送到客户端。但它会忽略其中的所有代码。
在服务器端代码中,您可以放置您只想在服务器上运行的代码,即发布功能,以及更敏感的数据。用户不应该有权访问。
答案 1 :(得分:1)
我认为它会被发送到客户端,除非它在服务器文件夹中。在回应关于共享全局变量的评论之一时,我一直在使用这种模式。分别在客户端和服务器文件夹中创建相同的全局变量,并在这些文件夹之外创建任何共享代码。通过测试来初始化每个地方的全局变量,看它是否已经存在。
MyVar = typeof MyVar === 'undefined' ? {} : MyVar;

然后,只需将方法放在需要它们的地方。例如,我将拥有一个User对象,其中包含一个方法,用于测试用户是否获得授权。我将在服务器全局用户上声明该方法一次,并在客户端全局用户上声明一次。方法不同,因为服务器版本检查用户对象上的自定义属性,这些属性在客户端上不可用。然后,在客户端和服务器上运行的Meteor.methods方法中,您可以调用授权方法,并根据它是否在客户端或服务器上运行来调用不同的方法。
答案 2 :(得分:1)
我今天问自己同样的问题并偶然发现了这个问题:
https://github.com/mquandalle/meteor-minifiers
默认情况下,Meteor似乎不会删除Meteor.isServer
块。
见这个讨论:
https://groups.google.com/forum/#!topic/meteor-talk/iHat47f6iGE
我现在还没有使用它,但看起来很有希望。
如果您不想使用额外的套餐,我建议您使用client
和server
个文件夹。只有client
文件夹中的文件才会发送到客户端。