无法将本地jquery.js加载到node.js(NPM jsdom)

时间:2016-08-09 13:14:42

标签: javascript jquery node.js

我试图根据示例将本地jquery.js加载到node.js NPM jsdom中:

var jsdom = require("jsdom");
var fs = require("fs");
var jquery = fs.readFileSync("c:/test/js/jquery.js", "utf-8"); // here it reads the jquery file from local disk

jsdom.env(
  "http://somewebsite.com",
  [jquery],
  function (err, window) {
    var $ = window.$;
    console.log("HN Links");
    $("td.title:not(:last) a").each(function () {
      console.log(" -", $(this).text());
    });
  }
);

它正在给出错误:

window.$(".detLink")[0].text
       ^

TypeError: window.$ is not a function
    at Object.done (C:\test.js:59:13)
    at C:\nodeJS\node_modules\jsdom\lib\jsdom.js:320:18
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickCallback (node.js:349:13)

只有从一些在线CDN中检索jquery时才有效:

jsdom.env(
  "http://somewebsite.com",
  ["http://code.jquery.com/jquery.js"], // here it reads the jquery from CDN
  function (err, window) {
    var $ = window.$;
    console.log("HN Links");
    $("td.title:not(:last) a").each(function () {
      console.log(" -", $(this).text());
    });
  }
);

本地jquery与CDN完全相同。

1 个答案:

答案 0 :(得分:0)

也许你应该考虑使用cheerio,这是一个快速,灵活,精简的核心jQuery实现,专门为服务器而设计。 :https://github.com/cheeriojs/cheerio

示例用例:

return request-promise(options)
    .then( (response) => {
        if (response.statusCode === 200) {
            const $ = cheerio.load(response.body);
            // do something 
        }
    })
    .catch( (err) => { console.log(`Url request error:  ${err}, ${url}`); });

request-promise是一个npm包:https://www.npmjs.com/package/request-promise