Node.js jsdom设置文件根目录

时间:2014-02-18 09:18:36

标签: node.js jsdom

我正在尝试使用jsdom加载本地javascripts。 现在我想知道如何让jsdom从“__dirname /../ public”加载javascripts。 有人能帮助我吗?

我目前的代码是:

var fs = require('fs');
var jsdom = require('jsdom');
jsdom.defaultDocumentFeatures = {
  FetchExternalResources: ["script"],
  ProcessExternalResources: ["script"],
  MutationEvents           : '2.0',
  QuerySelector            : false
};

exports.test = function(req, res) {
    var html = fs.readFileSync(__dirname+'/../public/html/lame.html');

    var document = jsdom.jsdom(html, null, {documentRoot: __dirname+'/../public/'});
    var window = document.createWindow();

    window.addEventListener('load', function () {
      //window.$('script').remove();
      //window.$('[id]').removeAttr('id');
        res.send(window.document.innerHTML);
      window.close();
    });
}

简单的HTML页面是:

<html>
    <head>
        <title id="title">bum</title>
        <script type="text/javascript" src="/javascripts/jquery.min.js"></script>
        <script type="text/javascript" src="/javascripts/stuff.js"></script>
    </head>
    <body>
        <h1>hello world</h1>
        <h2 id="bam">XXX</h2>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并让它发挥作用。按顺序尝试这些:

  1. documentRoot未记录在案。 documented的选项为url。因此,请将documentRoot替换为url

  2. 如果上述内容不足,请添加base元素。我已经设置了这样的模板:

    <head>
      <base href="@BASE@"></base>
      <!-- ... -->
    </head>
    

    其中@BASE@替换为与传递给url的值相同的值。

  3. 上述解决方案是从测试套件中使用的actual code中提取的。