Meteor:Meteor.isServer块中的代码是否可从客户端读取?

时间:2013-03-23 01:45:46

标签: meteor

我很困惑你何时会使用isServer块来填充内容。显然,数据库调用等等。这是否会显示在客户端浏览器中?

3 个答案:

答案 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

我现在还没有使用它,但看起来很有希望。

如果您不想使用额外的套餐,我建议您使用clientserver个文件夹。只有client文件夹中的文件才会发送到客户端。