【问题标题】:Is Meteor backend code always available on client-side?Meteor 后端代码是否始终在客户端可用?
【发布时间】:2013-08-09 08:28:32
【问题描述】:

我创建了测试 Meteor 应用程序,我发现可以使用客户端上的开发工具查看整体代码(服务器端也是如此)。 测试应用(在浏览器中):

 (function(){ if (Meteor.isClient) {
      Template.hello.greeting = function () {
        return "Welcome to test_app.";
      };

      Template.helo.events({
        'click input' : function () {
          // template data, if any, is available in 'this'
          if (typeof console !== 'undefined')
            console.log("You pressed the button");
        }
      });
    }

    if (Meteor.isServer) {
      Meteor.startup(function () {
        // code to run on server at startup
      });
    }

    }).call(this);

这是设计使然吗?服务端代码可以留在服务端吗?

【问题讨论】:

    标签: javascript node.js meteor


    【解决方案1】:

    如果您想在服务器上保留服务器端代码,您必须重构您的应用程序。

    在应用程序的根目录中创建这些目录:

    • /server - 存储仅在服务器上运行的所有内容
    • /client - 存储仅在客户端上运行的所有内容
    • /public/ - 在http://yoursite/ 中存储应该可以访问的任何内容(即图像、字体)。如果您将图像a.jpg 放入/public,它将在http://yoursite/a.jpg 可用

    使用此结构后,您不必再使用 if(Meteor.isServer) {..}if(Meteor.isClient) {..} 条件,因为它们会在正确的位置运行。

    当您将文件放在流星应用程序的根目录中时,它们将在客户端服务器上运行,因此这就是文件未更改的原因,if(Meteor.isServer) 中的所有内容都只会在服务器上运行。

    在服务器和客户端之间共享代码是设计使然,非常有帮助,尽管它对客户端和服务器都是可见的

    【讨论】:

    • 我想补充一点,即使您使用 if(Meteor.isServer){},如果它不在服务器文件夹中,它仍会将服务器代码发送到客户端。
    • 遗憾的是,没有直接选项可以使用“meteor create”中的文件夹布局选项,但您可以使用其中一个示例作为骨架“meteor create --example” - 也可以看看使用类似:github.com/matteodem/meteor-boilerplate
    • 事实上,您并不仅限于根目录下的 /server 和 /client 的单个实例 - 您可以在目录层次结构中的 any 点使用它们来表示服务器-only 和 client-only 组件。例如,您可以在代码中为每个功能块创建一个文件夹,并且每个块都有一个 /server 和一个 /client 文件夹来包含跨服务器和客户端实现该功能的文件。流星文档暗示了这一点,尽管它没有明确说明 - 但它绝对适用于这项工作。
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多