【问题标题】:Meteor.JS Use External Script (on the server)Meteor.JS 使用外部脚本(在服务器上)
【发布时间】:2015-01-06 08:09:42
【问题描述】:

我是 Meteor.JS 的新手,正在尝试在服务器上使用脚本。当我在客户端需要一个脚本时,我只是使用 jQuery 的 $.getScript(my-script.js) 来加载它,但是在服务器上,我得到了一个$ is not defined 错误,大概是因为 jQuery 没有加载到服务器上.如何在服务器端实现与 $.getScript() 调用类似的结果?

【问题讨论】:

  • 您能再解释一下您的用例吗?为什么仅将文件添加到项目文件夹中是不够的?您是否只在运行时知道要加载哪个脚本?
  • ^你是对的,我没有意识到我可以做到这一点并达到同样的效果。但是,我必须补充一点,我确实(奇怪地)必须将我正在加载的脚本中的一些变量声明更改为全局变量。考虑离开作为答案?

标签: javascript jquery meteor server


【解决方案1】:

您无需手动加载外部脚本,只需将它们作为文件添加到项目文件夹中即可。您文件夹中的所有文件都将由流星加载。请参阅文档的Namespacing 部分,了解有关如何使定义在全局而非脚本内部可用的说明。:

// File Scope. This variable will be visible only inside this
// one file. Other files in this app or package won't see it.
var alicePerson = {name: "alice"};

// Package Scope. This variable is visible to every file inside
// of this package or app. The difference is that 'var' is
// omitted.
bobPerson = {name: "bob"};

【讨论】:

    【解决方案2】:

    我不会建议这个过程,尤其是在服务器上。这会让您面临很多风险。 .getScript 方法使用 eval 在您的应用上创建远程代码执行漏洞。

    不过你可以使用 http 包

    meteor add http
    

    然后您可以检索脚本并执行它:

    var jsCode = HTTP.get("<full url>").content;
    eval(jsCode);
    

    【讨论】:

      【解决方案3】:

      如果您使用第三方脚本,最佳做法是创建一个包来包装它。在包中你要导出包的全局变量:api.export('GlobalVariable')

      如果您将脚本添加到服务器文件夹中,请不要使用var,否则它将仅在文件范围内保持全局。

      jQuery 在服务器上不存在,这是有充分理由的:您需要一个 DOM 才能使用它。你可以使用 phantomjs 来做:Server-side jquery

      并非所有代码都在客户端和服务器上运行。

      【讨论】:

        猜你喜欢
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2017-05-19
        • 2018-03-17
        • 1970-01-01
        • 2012-03-16
        相关资源
        最近更新 更多