我试图根据示例将本地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完全相同。
答案 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