当我跑的时候 node script.js page.html我有这个错误,我不知道为什么,我确实把jquery放在我的依赖项中并且安装了它
C:\用户\ NEBELYN \桌面\ projects1 \段落\ node_modules \ jquery的\ DIST \的jquery.js:29
抛出新的错误(" jQuery需要一个带有文档的窗口");
^错误:jQuery需要一个带文档的窗口at module.exports (C:\Users\NEBELYN\Desktop\projects1\paragraph\node_modules\jquery\dist\jquery.js:29:1 at Object.<anonymous> (C:\Users\NEBELYN\Desktop\projects1\paragraph\script.js:9:1) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3
这是正在运行的代码
var argv = require('optimist').argv,
$ = require('jquery'),
fs = require('fs');
var file = argv._[0];
var html = fs.readFileSync(file, 'UTF-8');
$(html).find('p').each(function(index) {
var content = $(this).html();
console.log('Paragraph ' + (index + 1) + ': ' + content);
});
,这是page.html
<html>
<body>
<p>Apple</p>
<span>Unrelated</span>
<p>Orange</p>
<div>
Steak
</div>
<p>Banana</p>
</body>
</html>
答案 0 :(得分:2)
jQuery需要一个完整的DOM实现,而服务器上没有这个实现。
要解析HTML文本,您应该使用一个名为Cheerio的更简单的库,它具有类似jQuery的API,但不使用DOM。
或者,您可以使用JSDOM伪造服务器上的浏览器DOM(这样会更慢)。
答案 1 :(得分:2)
我的代码在一个月前运行良好,但是当我通过npm升级到最新的jquery时开始显示此错误。如果我只知道如何找回旧版本,那么问题就会消失。
这似乎解决了这个问题:
npm install jquery
npm install jsdom
// Define window
var jsdom = require("jsdom");
var window = jsdom.jsdom().createWindow();
var $ = require("jquery")( window );