【问题标题】:calling javascript code from node.js code从 node.js 代码调用 javascript 代码
【发布时间】:2016-04-06 18:52:53
【问题描述】:

我想从 node.js 服务器内部的外部源运行一些 javascript 代码并返回结果。 在 html 代码中,我只会使用

<script>http:\\address.of.code.com\code.js</script>

如何在 node.js 中运行它来获取该脚本的结果并将其返回给调用者?

我不知道要运行的脚本,它位于外部地址中。

【问题讨论】:

  • @abc123:require 可以获取远程文件吗?
  • @abc123 是的,这要求有点不同。我认为在您发布的链接中,脚本位于相同的上下文中,因此在 Node 的情况下,这通常意味着相同的 fs。
  • 需要运行脚本,而不是获取它

标签: javascript node.js


【解决方案1】:

我建议查看 Node 的原生 vm 模块。所以以 Nazar 的例子为基础:

var vm = require('vm');
var request = require('request');
request('http://address.of.code.com/code.js', function (error, response, body) {
    if (!error && response.statusCode == 200) {
           var script = vm.Script(body);
           var ctxt = {};
           script.runInNewContext(ctxt);
           console.log(ctxt);
    }
});

这会从它的远程地址拉取脚本并运行它,而不影响拉取脚本的代码。以下是 vm 的文档:https://nodejs.org/dist/latest-v4.x/docs/api/vm.html

【讨论】:

  • @Dani 谢谢!介意在那种情况下接受答案吗?
  • 当然,我还有一个问题 - b/c 脚本显然需要在浏览器中运行(缺少文档等),但它超出了这个问题的范围......跨度>
  • 哦,那可能是因为 window === undefined 在 Node.js 中。如果您查看 vm 的文档,您可以定义一个已定义全局变量的上下文,因此您可以将 window 定义为{},应该没问题。
  • 如果它做 UI 的东西,是的,但理论上,使用 vm 的上下文你可以完全伪造一个 dom。虽然我可以看到在那里复制事件变得很头疼。
【解决方案2】:

这个怎么样?

    var request = require('request');
    request('http:\\address.of.code.com\code.js', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body) 
         }
    })

最好的问候,纳扎尔梅代罗斯

【讨论】:

  • 这段代码给我脚本,但没有运行它我会尝试@Christian Grabowski 增强。
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2017-02-10
  • 1970-01-01
相关资源
最近更新 更多